既にあるDockerの開発環境を起動させようとしたら、
ポート周りのエラーがが出て、なぜか起動できず困った。
よく調べたら、Dockerのweb側で使用している「88番ポート」と
自分のMacのとあるプロセスが使用している「88番ポート」が衝突していたようだ。
最初の状態)起動に失敗
$ 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
available: listen tcp 0.0.0.0:88: bind: address already in use
既に「88番ポート」が使われているので、
Dockerを起動できない、とのエラーが。
そこで、自分のMac側の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番ポートを埋めてしまっているようだ。
となると、Dockerのためにも、このプロセスの息の根を止める必要がある。
本来であれば、Docker側のポートを変えたいところだが、
既に開発が進んでいる案件ということもあり、
なかなかDocker側のポート番号は変えられない、という事情もあった。
となれば、選択肢はただ1つ。Mac側のこいつ「kdc」をkillするしかない。
kill しても良いプロセスなのか?
そこで、1つ疑問が生まれる。
「kdc」とはなんなのか?
killしても良いプロセスなのか、という点だ。
そこで、「kdc」について調査してみた。Macの公式サイトによると、88番ポートを使用している「kdc」とは「ケルベロス」という認証用のプロセスのようだ。
ケルベロスを kill したい
Macのデフォルトのポートとなると、しかも、認証用に使われるポートとなると、
正直 kill するのはどうか、と気が引けてきた。
しかも、Dockerの為だけに、このプロセスをkillしたことで、
Mac 本体の認証に影響があっては、正直こわすぎる。
(kill するのか、しないのか!!!!)
(しないと、開発を前に進められない!!!)
(でも、kill してしまえば 今度は Mac の方が が 殺られる可能性も!!)
まあ、自分の Mac のためにも今回は、
kill しないのが正だろうな。
よし、
kill しよう!!!!!
開発のために!!みんなのために!!
私は、決めた。
今回は 自分の Mac に犠牲になってもらう道を選んだ。
(ケルベロスを killl する!!)
(コマンドはなんだっけ...)
(sudo ... 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 は実行していたのですが、ケルベロスは、また別プロセスとして復活してしまうのです。
「88」番ポートを使用しているケルベロスを kill しても kill しても立ち上がってしまう…。なんだこいつ強すぎだろ。これでは、ケルベロスと私のイタチごっこになってしまう。
こんな不毛な闘いに、
この忙しい私が付き合ってる暇はない!!!!
※ 私:クリスマスの予定0
結論として私は
自分のローカル環境だけ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
ケルベロス「おま、
散々時間とって、結論これだけかよ」
って話なのです Yo...
ケルベロス「なんて尻すぼみの記事なんだ Yo...」
参考
【Docker】ポートエラーが出て自分だけコンテナを起動できない…涙
弱虫ペダル:2022年10月からNHK総合にて放送予定!!