提出問題:
在使用Rancher2.0.2部署一個mysql deployment時,我們會發現,如果只設置/var/lib/mysql數據目錄時,mysql容器(pod)能夠正常啓動,一旦數據目錄和配置目錄同時掛載時,mysql容器(pod)就無法啓動。
解決思路:
我們運行一個MySQL 5.6的容器,觀察正常運行時,容器內數據目錄、配置目錄、日誌目錄的所有者及權限,並查看容器內組文件,對比宿主機中的組文件,應該能找到原因所在,進而可以通過在宿主機中設置正確的目錄權限和所有者來解決該問題。
Docker宿主機中:
組文件: /etc/group
root:x:0:
adm:x:4:syslog,catty
docker:x:999:catty
catty:x:1000
MySQL容器中:
功能 目錄 chown -R chmod
日誌目錄: /var/log/mysql mysql:adm 640
數據目錄: /var/lib/mysql mysql:mysql 640
配置文件: /etc/mysql/mysql.conf.d root:root 644
組文件: /etc/group
root:x:0:
adm:x:4:
mysql:x:999:
圖1、MySQL5.6容器中目錄權限及所有者
解決辦法:
如果運行mysql容器時,需要使用自定義配置文件,可在主機上創建目錄,設置所有者爲root用戶和root組,命令: chown -R root:root /etc/mysql/ ,然後運行容器時,使用-v /etc/mysql:/etc/mysql 將該目錄掛載到容器中,這樣才能正常啓動MySQL容器。
參考鏈接:
Set permissions on log folder #349
https://github.com/docker-library/mysql/pull/349
5.7.10-fails to mount volume `/var/log/mysql` #146
https://github.com/docker-library/mysql/issues/146#ref-commit-68a2cd4