【Docker】ポートエラーが出て自分だけコンテナを起動できない…涙

エンジニア|ポートフォリオ
新人

あれ?ポートのエラーが出て自分だけDockerが起動できない…

自分だけ開発出遅れてる…(焦

今回の記事は上記のような方におすすめ。

今回の記事では、ポート周りのエラーの原因と、解消方法について…Docker初心者でもわかるよう、わかりやすく解説いたします!

最近ではDockerを使って開発環境の準備を行う企業も多いかもしれません。一方で、時間短縮のためのDockerでエラー解消方法がわからず、丸1日ぶっつぶれ…なんて事態も最初は起きがちですよね。

「なんで時短のためのDockerでこんな時間取られなきゃならないんだよ!!」なんて怒りも湧いてくるかもしれませんが、ポートエラーの解消はめちゃくちゃカンタンでした!

エンジニア|ポートフォリオ
新人

間違っている箇所あったらコメントで教えてね。

本記事の内容

なおこの記事は3分で読める内容です。

【Docker】ポートエラーの原因

$ docker-compose up -d
Creating network "sample_default" with the default driver
Creating sample-db ... done
Creating sample-web ... error
ERROR: for sample-web  Cannot start service sample-web: Ports are not available: listen tcp 0.0.0.0:88: bind: address already in use

ポート「88」が使用できません。すでに使用されています、とのエラー内容が。

次に、ポート88を利用しているプロセスを確認してみます。

$ sudo lsof -i -P | grep "LISTEN"
kdc        151           root    5u  IPv6 0xxxxxxxxxxxxxxxxx      0t0    TCP *:88 (LISTEN)
kdc        151           root    7u  IPv4 0xxxxxxxxxxxxxxxxx      0t0    TCP *:88 (LISTEN)

どうやら、「kdc」というプロセスが88番ポートを既に使っちゃってるようですね。つまりは、別のプロセスで使用されているため、起動がうまくいかないようです。

プロセスをkillしても大丈夫…?

他の記事でプロセスをkillすれば良い、的なのもあったのですが、そもそも「kdc」が何かわからない以上は「kill」するのもどうかと思ったので、「kdc」について調べてみました。Mac公式の記事によると、kdcは「ケルベロス」という認証周りのプロセスのようです。

ポートサービス名ポートを使う製品/サービス
88kerberosKerberos (画面共有の認証など)
参考:Macで使用されているデフォルトポート番号

このプロセスをkillすることで、一旦はDockerの問題は解消されるかもしれませんが、今度Mac本体の認証に影響があっては怖いので、killする方法は断念しました。

エンジニア|ポートフォリオ
新人

ただし…killでどうなるかはめちゃくちゃ気になる…!!!(フラグ)

(えい!!!!!!!)

$ sudo kill -9 151
$ sudo lsof -i -P | grep "LISTEN"
postgres   122       postgres    7u  IPv6 0xxxxxxxxxxxxxxxxx      0t0    TCP *:5433 (LISTEN)
postgres   122       postgres    8u  IPv4 0xxxxxxxxxxxxxxxxx      0t0    TCP *:5433 (LISTEN)
Google     787           user  132u  IPv4 0xxxxxxxxxxxxxxxxx      0t0    TCP localhost:49567 (LISTEN)
Adobe\x20  846           user   16u  IPv4 0xxxxxxxxxxxxxxxxx      0t0    TCP localhost:15292 (LISTEN)
Adobe\x20  846           user   26u  IPv4 0xxxxxxxxxxxxxxxxx      0t0    TCP localhost:15393 (LISTEN)
Adobe\x20  846           user   28u  IPv4 0xxxxxxxxxxxxxxxxx      0t0    TCP localhost:16494 (LISTEN)
エンジニア|ポートフォリオ
新人

ん…消え…た…?

画面の下の方に行くと…

postgres   122       postgres    7u  IPv6 0xxxxxxxxxxxxxxxxx      0t0    TCP *:5433 (LISTEN)
postgres   122       postgres    8u  IPv4 0xxxxxxxxxxxxxxxxx      0t0    TCP *:5433 (LISTEN)
Google     787           user  132u  IPv4 0xxxxxxxxxxxxxxxxx      0t0    TCP localhost:49567 (LISTEN)
Adobe\x20  846           user   16u  IPv4 0xxxxxxxxxxxxxxxxx      0t0    TCP localhost:15292 (LISTEN)
Adobe\x20  846           user   26u  IPv4 0xxxxxxxxxxxxxxxxx      0t0    TCP localhost:15393 (LISTEN)
Adobe\x20  846           user   28u  IPv4 0xxxxxxxxxxxxxxxxx      0t0    TCP localhost:16494 (LISTEN)
・
・
・
kdc       3218           root    5u  IPv6 0xxxxxxxxxxxxxxxxx      0t0    TCP *:88 (LISTEN)
kdc       3218           root    7u  IPv4 0xxxxxxxxxxxxxxxxx      0t0    TCP *:88 (LISTEN)
エンジニア|ポートフォリオ
新人

あれ?kdc生きてる…

killする番号間違えたかな…?

(再度!!!!)

$ sudo kill -9 3218
$ sudo lsof -i -P | grep "LISTEN"
postgres   122       postgres    7u  IPv6 0xxxxxxxxxxxxxxxxx      0t0    TCP *:5433 (LISTEN)
postgres   122       postgres    8u  IPv4 0xxxxxxxxxxxxxxxxx      0t0    TCP *:5433 (LISTEN)
Google     787           user  132u  IPv4 0xxxxxxxxxxxxxxxxx      0t0    TCP localhost:49567 (LISTEN)
Adobe\x20  846           user   16u  IPv4 0xxxxxxxxxxxxxxxxx      0t0    TCP localhost:15292 (LISTEN)
Adobe\x20  846           user   26u  IPv4 0xxxxxxxxxxxxxxxxx      0t0    TCP localhost:15393 (LISTEN)
Adobe\x20  846           user   28u  IPv4 0xxxxxxxxxxxxxxxxx      0t0    TCP localhost:16494 (LISTEN)
エンジニア|ポートフォリオ
新人

消えたかな…?

画面の下の方に行くと…

postgres   122       postgres    7u  IPv6 0xxxxxxxxxxxxxxxxx      0t0    TCP *:5433 (LISTEN)
postgres   122       postgres    8u  IPv4 0xxxxxxxxxxxxxxxxx      0t0    TCP *:5433 (LISTEN)
Google     787           user  132u  IPv4 0xxxxxxxxxxxxxxxxx      0t0    TCP localhost:49567 (LISTEN)
Adobe\x20  846           user   16u  IPv4 0xxxxxxxxxxxxxxxxx      0t0    TCP localhost:15292 (LISTEN)
Adobe\x20  846           user   26u  IPv4 0xxxxxxxxxxxxxxxxx      0t0    TCP localhost:15393 (LISTEN)
Adobe\x20  846           user   28u  IPv4 0xxxxxxxxxxxxxxxxx      0t0    TCP localhost:16494 (LISTEN)
・
・
・
kdc       3346           root    5u  IPv6 0xxxxxxxxxxxxxxxxx      0t0    TCP *:88 (LISTEN)
kdc       3346           root    7u  IPv4 0xxxxxxxxxxxxxxxxx      0t0    TCP *:88 (LISTEN)
エンジニア|ポートフォリオ
新人

ん????まだ、生きてる?

(再度!!!!)

$ sudo kill -9 3346
$ sudo lsof -i -P | grep "LISTEN"
postgres   122       postgres    7u  IPv6 0xxxxxxxxxxxxxxxxx      0t0    TCP *:5433 (LISTEN)
postgres   122       postgres    8u  IPv4 0xxxxxxxxxxxxxxxxx      0t0    TCP *:5433 (LISTEN)
Google     787           user  132u  IPv4 0xxxxxxxxxxxxxxxxx      0t0    TCP localhost:49567 (LISTEN)
Adobe\x20  846           user   16u  IPv4 0xxxxxxxxxxxxxxxxx      0t0    TCP localhost:15292 (LISTEN)
Adobe\x20  846           user   26u  IPv4 0xxxxxxxxxxxxxxxxx      0t0    TCP localhost:15393 (LISTEN)
Adobe\x20  846           user   28u  IPv4 0xxxxxxxxxxxxxxxxx      0t0    TCP localhost:16494 (LISTEN)
エンジニア|ポートフォリオ
新人

これで消えたよね

画面の下の方に行くと…

postgres   122       postgres    7u  IPv6 0xxxxxxxxxxxxxxxxx      0t0    TCP *:5433 (LISTEN)
postgres   122       postgres    8u  IPv4 0xxxxxxxxxxxxxxxxx      0t0    TCP *:5433 (LISTEN)
Google     787           user  132u  IPv4 0xxxxxxxxxxxxxxxxx      0t0    TCP localhost:49567 (LISTEN)
Adobe\x20  846           user   16u  IPv4 0xxxxxxxxxxxxxxxxx      0t0    TCP localhost:15292 (LISTEN)
Adobe\x20  846           user   26u  IPv4 0xxxxxxxxxxxxxxxxx      0t0    TCP localhost:15393 (LISTEN)
Adobe\x20  846           user   28u  IPv4 0xxxxxxxxxxxxxxxxx      0t0    TCP localhost:16494 (LISTEN)
・
・
・
kdc       3467           root    5u  IPv6 0xxxxxxxxxxxxxxxxx      0t0    TCP *:88 (LISTEN)
kdc       3467           root    7u  IPv4 0xxxxxxxxxxxxxxxxx      0t0    TCP *:88 (LISTEN)
エンジニア|ポートフォリオ
新人

(おい!!!生きてんじゃねぇかよ!!)

エンジニア|ポートフォリオ
ベテラン

何に使われているかわからない以上、
やたらに killするのはやめましょう。

結論)ケルベロスは死なない

ケルベロスを何度もkillしてみました。

確実にkillをしたのですが、また別プロセスとして復活してしまいました。

「88」番ポートを使用しているケルベロスをkillしてもkillしても立ち上がってしまう…。なんだこいつ強すぎだろ。これでは、ケルベロスとのイタチごっこになってしまう。

こんな不毛な戦いは、いつ終わるかわからないので、結論として私は自分のローカル環境だけDockerのポート番号を別のものにして起動することにしました。

ポート番号を変更で解決!

以下の箇所「88」を「8888」にして再度「docker-compose up -d」すると…

ports:
  - "88:3000"

# こう↓
ports:
  - "8888:3000"

立ち上げられました。

$ docker-compose up -d
sample-db is up-to-date
Recreating sample-web ... done

まとめ

ポート番号を変えて起動する…なんとも初歩的な解決策のようだが、私にとってはこれがベストであった。Dockerは難しいなぁ。

M1 mac かWindowsかなど、人によって環境が違う以上は、Dockerにおいては、全員がうまくいくコードを書くのは難しいのかもしれない。端末ごとのエラーを蓄積して次、同じエラーが出た際はより時短できると良いなとは思う。

まあ、Dockerは、先輩と環境が違うとエラーの内容も違ったりして、質問するものされるのも大変だ。もっと端末ごとのネットの記事が増えてくれたらなぁと思う。

エンジニア|ポートフォリオ
新人

ほんと、不毛な戦いだったよね

参考

この記事を書いた人

takeda-pf

訪問いただき、ありがとうございます。こちらのサイトは、たけだなおの個人ポートフォリオサイトとなります。