【Docker】Error starting userland proxy: listen tcp4 0.0.0.0:xx: bind: address already in use.エラー解消方法


Dockerコンテナ構築時以下のようなポートエラーが発生することがあります。

Error starting userland proxy: listen tcp4 0.0.0.0:22: bind: address already in use.

このエラーについての対応方法をメモしておきます。

「Docker」コンテナ起動時のポートエラー解消方法

以下のようにdockerコンテナを起動しようとすると、すでにポート22が使用されているから使えないという旨のエラーが発生します。

# docker run -p 22:22 -d atmoz/sftp foo:pass:::upload
8886d0f9740a1988d6da27dc8f62abdc7d556aba8cdef7e39fc2f7779c152268
docker: Error response from daemon: driver failed programming external connectivity on endpoint romantic_haslett (f4f9d55d8c947ff55486ab89a564abd2992c83c969f522ab0a5c0fd05c3bba00): Error starting userland proxy: listen tcp4 0.0.0.0:22: bind: address already in use.

このエラーの原因は対処ポートが使われていることが原因となり、以下コマンドで確認すると「sshd」で使用されていることが分かります。

# lsof -i -P | grep "LISTEN"
sshd       1087            root    5u  IPv4   25870      0t0  TCP *:22 (LISTEN)
sshd       1087            root    7u  IPv6   25878      0t0  TCP *:22 (LISTEN)
systemd-r  1299 systemd-resolve   13u  IPv4   27765      0t0  TCP *:5355 (LISTEN)
systemd-r  1299 systemd-resolve   15u  IPv6   27768      0t0  TCP *:5355 (LISTEN)
docker-pr 90992            root    4u  IPv4 5403392      0t0  TCP *:30009 (LISTEN)
docker-pr 91004            root    4u  IPv4 5403890      0t0  TCP *:30008 (LISTEN)
docker-pr 91016            root    4u  IPv4 5403568      0t0  TCP *:30007 (LISTEN)
docker-pr 91028            root    4u  IPv4 5404702      0t0  TCP *:30006 (LISTEN)
docker-pr 91041            root    4u  IPv4 5404131      0t0  TCP *:30005 (LISTEN)
docker-pr 91053            root    4u  IPv4 5404208      0t0  TCP *:30004 (LISTEN)
docker-pr 91065            root    4u  IPv4 5404279      0t0  TCP *:30003 (LISTEN)
docker-pr 91077            root    4u  IPv4 5404415      0t0  TCP *:30002 (LISTEN)
docker-pr 91089            root    4u  IPv4 5405162      0t0  TCP *:30001 (LISTEN)
docker-pr 91101            root    4u  IPv4 5404564      0t0  TCP *:30000 (LISTEN)
docker-pr 91113            root    4u  IPv4 5404661      0t0  TCP *:21 (LISTEN)
docker-pr 91629            root    4u  IPv4 5410776      0t0  TCP *:2222 (LISTEN)

エラー事象の対策

このエラーの回避方法はポートを使用しているサービスを停止すれば解決します。
今回は「sshd」となるので以下のコマンドを実行し、サービスを停止します。

# systemctl stop sshd

再度以下コマンドで「22」番ポートが使用されているか確認すると使用されていないことが分かります。

# lsof -i -P | grep "LISTEN"
systemd-r  1299 systemd-resolve   13u  IPv4   27765      0t0  TCP *:5355 (LISTEN)
systemd-r  1299 systemd-resolve   15u  IPv6   27768      0t0  TCP *:5355 (LISTEN)
docker-pr 90992            root    4u  IPv4 5403392      0t0  TCP *:30009 (LISTEN)
docker-pr 91004            root    4u  IPv4 5403890      0t0  TCP *:30008 (LISTEN)
docker-pr 91016            root    4u  IPv4 5403568      0t0  TCP *:30007 (LISTEN)
docker-pr 91028            root    4u  IPv4 5404702      0t0  TCP *:30006 (LISTEN)
docker-pr 91041            root    4u  IPv4 5404131      0t0  TCP *:30005 (LISTEN)
docker-pr 91053            root    4u  IPv4 5404208      0t0  TCP *:30004 (LISTEN)
docker-pr 91065            root    4u  IPv4 5404279      0t0  TCP *:30003 (LISTEN)
docker-pr 91077            root    4u  IPv4 5404415      0t0  TCP *:30002 (LISTEN)
docker-pr 91089            root    4u  IPv4 5405162      0t0  TCP *:30001 (LISTEN)
docker-pr 91101            root    4u  IPv4 5404564      0t0  TCP *:30000 (LISTEN)
docker-pr 91113            root    4u  IPv4 5404661      0t0  TCP *:21 (LISTEN)
docker-pr 91629            root    4u  IPv4 5410776      0t0  TCP *:2222 (LISTEN)


対象ポート解放後、再度Dockerコンテナを起動

上記で「22」番ポートを開放後再度Dockerを起動します。

# docker run -p 22:22 -d atmoz/sftp foo:pass:::upload
5c9fe8604c85c96ee7cefd161c504b4efec5ea751617bc41a7ed9b173e29a19d

うまく起動ができ、サービスも立ち上がりました。

# docker ps
CONTAINER ID   IMAGE                 COMMAND                  CREATED             STATUS          PORTS                                                      NAMES
5c9fe8604c85   atmoz/sftp            "/entrypoint foo:pas…"   7 seconds ago       Up 6 seconds    0.0.0.0:22->22/tcp

「Error starting userland proxy: listen tcp4 0.0.0.0:xx: bind: address already in use.」の対応方法は以上となります。


関連記事


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

ABOUTこの記事をかいた人

blank

インターネット関連のSEをやっています。 ネットワーク、サーバー、ストレージ、仮想基盤まで幅広く手を出しており、MVNOの構築経験もあります。 現在は、Pythonを使ったプログラミングの開発をしネットワークの自動化ツールを作成しています! Pythonの入門書も作成しているので、ぜひ参考にしてください!