今天有一個ubuntu+mysql的測試環境,在容器重啓的時候mysql啓動失敗,導致docker啓動失敗。
首先查看docker日誌
docker logs 8a16
發現有如下報錯:
* Stopping MySQL database server mysqld
...done.
* Starting MySQL database server mysqld
...fail!
所以基本排查出事mysql服務沒啓動導致docker啓動失敗。因爲我在啓動腳本start.sh 添加了set -e命令
所以接下來就要查看一下mysql報什麼錯誤。
啓動docker的時候馬上進入容器,否則等下失敗容器就被關閉了。
docker start 8a16
docker exec -it 8a16 /bin/bash
查看mysql錯誤日誌
cat /var/log/mysql/error.log
發現多次測試啓動失敗的報錯均是以下錯誤。
2018-12-18T09:58:41.325466Z 0 [ERROR] Another process with pid 439 is using unix socket file.
2018-12-18T09:58:41.325486Z 0 [ERROR] Unable to setup unix socket lock file.
2018-12-18T09:58:41.325528Z 0 [ERROR] Aborting
docker重啓容器的時候,有時候會導致mysql異常關閉,然後在目錄下生成一個mysql.sock.lock ,這個文件存在的原因導致mysql服務啓動失敗。
所以我在我的啓動腳本start.sh增加了一行
rm -rf /var/run/mysqld/mysqld.sock.lock
再測試幾次均能成功啓動容器。到此問題已解決。
PS:之前也遇到mysql服務啓動失敗,然後再啓動腳本增加了一行 choen -R mysql:mysql /var/lib/mysql /var/run/msqld