【Docker】強虫べロス 〜不死身のプロセスをkillせよ〜【環境構築】


既にある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側のポート番号は変えられない、という事情もあった。

となれば、選択肢はただ１つ。Mac側のこいつ「kdc」をkillするしかない。

# kill しても良いプロセスなのか？
そこで、１つ疑問が生まれる。
「kdc」とはなんなのか？
killしても良いプロセスなのか、という点だ。


そこで、「kdc」について調査してみた。Macの公式サイトによると、88番ポートを使用している「kdc」とは「ケルベロス」という認証用のプロセスのようだ。

[参考：Macで使用されているデフォルトポート番号](https://support.apple.com/ja-jp/HT202944)

# ケルベロスを 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 しても立ち上がってしまう…。なんだこいつ強すぎだろ。これでは、ケルベロスと私のイタチごっこになってしまう。

***

こんな不毛な闘いに、

# この忙しい私が付き合ってる暇はない！！！！

※ 私：クリスマスの予定０

***

結論として私は

# 自分のローカル環境だけDockerのポート番号を別のものに変更して起動

することにしました。

# ポート番号を変更で解決！
以下の箇所「88」を「8888」にして再度「docker-compose up -d」すると…

```docker-compose.yml
ports:
  - "88:3000"

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

立ち上げられました。

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


***

ケルベロス「おま、
散々時間とって、結論これだけかよ」



# って話なのです Yo... :woman_tone1:


ケルベロス「なんて尻すぼみの記事なんだ Yo...」

***


# 参考

[【Docker】ポートエラーが出て自分だけコンテナを起動できない…涙](https://takeda-no-nao.net/programming/ruby/port-errors-and-why-containers-cannot-be-started/)
[弱虫ペダル：2022年10月からNHK総合にて放送予定!!](http://yowapeda.com/)