1. 問題描述:一向運行正常的一群容器,突然有一天掛掉了,再也起不來,報錯如下
Error response from daemon: devmapper: Error mounting '/dev/mapper/docker-253:0-155266-97eaf4ba0669a6a8f010204b29e0ba923a35e93aa9c47d5bb2c7b14db4c4e619' on '/var/lib/docker/devicemapper/mnt/97eaf4ba0669a6a8f010204b29e0ba923a35e93aa9c47d5bb2c7b14db4c4e619': invalid argument
Error: failed to start containers: gocd-server
2. 問題解決過程
經過谷歌搜索,定位到一篇文章https://github.com/moby/moby/issues/29622,跟selinux有關,但是查看本機的selinux已經是disabled狀態了。
經過尋找蛛絲馬跡發現,在我們裝完一個系統時,當我們的selinux狀態是enforcing的時候,我們做的第一件事可能就是臨時修改為permissive,而修改配置文件為disabled,在docker容器死掉之前發現系統被重啟過一次,懷疑問題原因為重啟前和重啟后selinux狀態不一致導致。
最后關於這個問題得出的結論是:在創建容器的時候selinux狀態為permissive,而重啟后selinux狀態為disabled,導致容器創建時和啟動時selinux上下文不一致,原先正常的容器啟動失敗。解決方法是修改配置文件為permissive,重啟系統。
同時我們忽略了一個問題,permissive是一個中立的狀態,但不代表它沒有自己的態度。
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.