docker啟動MySQL容器失敗原因分析以及排查記錄
docker啟動MySQL容器失敗原因及排查記錄
背景
最近在嘗試容器搭建MySQL集群時碰到一個錯誤,啟動MySQL時碰到一個,經過排查解決,在此做一個記錄
問題過程
啟動MySQL容器
$ sudo docker run -d -p 3306:3306 \ > --name mysql \ > -v /opt/mysql/log:/var/log/mysql \ > -v /opt/mysql/data:/var/lib/mysql \ > -v /opt/mysql/conf:/etc/mysql \ > -e MYSQL_ROOT_PASSWORD=root \ > mysql 3cf4012772cc2e22732aa6d5eb716d7b290a95da25b750d4a1189e77ab985f33 # 運行后,查看運行中的容器發(fā)現(xiàn)沒有剛啟動MySQL [bing@centosone nginx]$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5c7b103435d1 nginx:latest "/docker-entrypoint.…" 8 hours ago Up 8 hours 0.0.0.0:443->443/tcp, :::443->443/tcp, 0.0.0.0:85->80/tcp, [::]:85->80/tcp my-nginx 28cda42916c3 nginx:latest "/docker-entrypoint.…" 15 hours ago Up 15 hours 0.0.0.0:82->80/tcp, [::]:82->80/tcp
mysql
/log
:存儲MySQL日志mysql
/data
:是數(shù)據(jù)庫文件(庫表數(shù)據(jù)存放處)存放的地方。必須要掛載到容器外,否則容器重啟一切數(shù)據(jù)消失。mysql
/conf
:mysql配置,mysql啟動時讀取配置
查看所有容器docker ps -a
發(fā)現(xiàn)MySQL是已經exit了
$ sudo docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4e163949caa2 mysql "docker-entrypoint.s…" 20 minutes ago Exited (1) 17 minutes ago mysql
然后嘗試刪除容器重啟還是一樣
$ sudo docker rm 4e1 4e1 $ sudo docker run -p 3306:3306 --name mysql -v /opt/mysql/log:/var/log/mysql -v /opt/mysql/data:/var/lib/mysql -v /opt/mysql/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql b3153c7d9d33f28e9808fbd6f8feea44ac12e45f9aec637a789a29b9f7f5dcd2 # 仍然是exit狀態(tài) $ sudo docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b3153c7d9d33 mysql "docker-entrypoint.s…" 3 seconds ago Exited (1) 2 seconds ago mysql
查看容器日志
$ sudo docker logs --tail 100 --follow --timestamps {容器名稱}
問題原因
如上圖,查看日志發(fā)現(xiàn)是沒有配置文件目錄,我們的命令指定的配置文件路徑是/etc/mysql/,而容器讀取的配置文件路徑是/etc/mysql/conf.d/。
在這一行-v /opt/mysql/conf:/etc/mysql,我們將主機路徑/opt/mysql/conf掛載到容器路徑/etc/mysql下,實際上容器配置在/etc/mysql/conf.d/目錄下。
修改啟動命令
修改啟動命令中的配置文件路徑,再次重新啟動成功,如下:
sudo docker run -p 3306:3306 --name mysql \ -v /opt/mysql/log:/var/log/mysql \ -v /opt/mysql/data:/var/lib/mysql \ -v /opt/mysql/conf:/etc/mysql/conf.d \ -e MYSQL_ROOT_PASSWORD=root \ -d mysql ef8d15ff3c2828b718357ad7d41117ca46c3fec7bb6b3a365c886926b275fbb8 # 啟動成功 sudo docker ps [sudo] bing 的密碼: CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ef8d15ff3c28 mysql "docker-entrypoint.s…" 11 minutes ago Up 11 minutes 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp
mysql容器終于是 Up 狀態(tài)了
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Docker利用DockerFile創(chuàng)建部署NVIDIA+PyTorch容器的詳細過程
這篇文章主要介紹了Docker利用DockerFile創(chuàng)建部署NVIDIA+PyTorch容器的詳細過程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-06-06