selinux導致docker啟動失敗
本文轉載地址:http://www.cnblogs.com/elisun/p/6963818.html
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. 問題解決過程
經過尋找蛛絲馬跡發現,在我們裝完一個系統時,當我們的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