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.」の対応方法は以上となります。
Dockerを構築するならVPSがおすすめです。
エンジニアのオンライン学習
ITエンジニアにおすすめの教材、オンラインスクールです。
無料からエンジニアの学習ができる教材などまとめているので参考にしてください。
おすすめオンライン教材 | |
自宅で学習ができるオンラインスクール | |
ITエンジニアの開発・検証・学習としてインターネット上で専用のサーバ(VPS)を利用しましょう!
実務経験はVPSで学べます。
コメントを残す