LoginSignup
1
0

More than 3 years have passed since last update.

DockerでMySQLが起動しない【解決方法】

Last updated at Posted at 2020-08-26

経緯

さっきまで上がってたdocker-composeが急に上がらなくなった。
どうやらDBがネックになってるらしいぞ

あれ!?ポートが指定できない!?アイエーナンデー!!

症状

docker-compose upするとBind: address already in useと言うエラーが出る

結論

ローカルでMySQLが上がっており、ホスト側のポートで衝突が起きていました。

解決の流れ

原因分析

Bind: address already in useと言うエラーが出るということでポートの衝突が原因ということは明らか。
つまり考えるべきはホスト側かDocker側のどちらかである。

私はDocker側の問題だと思って調査を始めた

Docker側にあり得る原因の対処

他のコンテナが生きておりポートが衝突してしまっていることを疑い、調べてみた。

というわけで、現在生きているコンテナ全停止docker-compose downまたはdocker stop ${docker ps -q}、DBコンテナのみの実行Docker run mysql:5.7 --name mysql -p 3306:3306を試してみた。

【結果】

同じエラーを吐くのでこちらではないことがわかった。

(実際はビルドが問題ではとか思い、イメージの全削除とか言うことをしていたが完全に徒労だった。。。)

ホスト側にあり得る原因の対処

ホスト側に原因があるとすれば別プロセスが使用してしまっていることを予想した。

まずソケットを表示するコマンドを叩いて状況確認

$ ss -atn
State     Recv-Q Send-Q                             Local Address:Port                  Peer Address:Port                                                                                                 
# 実際にはこの一番上にport 3306のソケットが表示されていた
LISTEN    0      128                                127.0.0.53%lo:53                         0.0.0.0:*                                                                                                    
LISTEN    0      5                                      127.0.0.1:631                        0.0.0.0:*                                                                                                    
LISTEN    0      224                                    127.0.0.1:5432                       0.0.0.0:*                                                                                                    
ESTAB     0      0                                    172.20.10.9:46516                 104.244.42.3:443                                                                                                  
ESTAB     0      0                                    172.20.10.9:43066               151.101.109.44:443  

プロセスがあることがわかったので、どのプロセスなのかを突き止める
sudoで実行しないと正しく見えな)い場合があるので注意(1敗)


$ sudo lsof -i:3306
COMMAND    PID     USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
mysqld    2055    mysql   ?u  IPv4    ????      XXX  TCP *:mysql (LISTEN)

mysqlの停止

起動コマンドはsystemctlserviceが存在する。
どちらでも上がるが、止めるのは上げたコマンドを使用しないと止まりません(1敗)

sudo systemctl stop mysqldもしくはservice mysqld stopを実行

【結果】

解決!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0