環境前提
MacのDocker Desktopを使っている前提です。
なお、自身のMAC OSのバージョンは12.6.9、Docker Desktopのバージョンは4.6.1です。
概要
dockerを起動しようとしたところ下記のエラーが表示されました。
これはdockerコンテナ上の通信のために親ホスト側で6443ポートを利用しようとしていて、稼働中の親ホスト環境でも6443ポートを利用しているのでポート番号が競合してしまってるのでエラーが出力されています。
ERROR: for testcontainer Cannot start service yyyyy: driver failed programming external connectivity on endpoint testcontainer(7e3987bc0b4f9f82af72b1669587a7f3e080df33e6af810729bc92fac51d8273): listen tcp4 0.0.0.0:6443: bind: address already in use
下記コマンドにてプロセスを特定したところDocker Desktopで6443ポートが使われていました。
6443というポート番号は複数のコンテナ上で稼働させていると、TLSの「443」ポートつながりで親ホストからも設定される可能性があります。
$ sudo lsof -i :6443
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
com.docke 8172 azarashi 168u IPv4 0x264940a1a6d323cd 0t0 TCP localhost:sun-sr-https (LISTEN)
$ pstree
対応方針としては以下の2つです。今回は(2)の方針で進めます。
- (1) アプリケーション側で6443を利用しない様にする。
- (2) Kubernetes機能を使っていないのならば、6443ポートで起動する機能を停止する。
Docker DesktopのPreferencesを開いて、左側の「Kubernetes」タブを開く事で下記画面が表示されます。
今回は「Kubernetes」を利用していなかったので、「Enable Kubernetes」のチェックを外して「Apply&Restart」を実行しました。
しかし、その後も6443ポートのプロセスは消えることがなかったので、しばらくハマりましたが、MAC OS自体をその後OS再起動することで6443ポートを利用するプロセスが起動しなくなりました。
「Apply&Restart」だけでは6443ポートのプロセスを削除まで行ってくれないみたいなので注意が必要です。