[英]/var/run/docker.sock unaccessible in container running on centos 7
我正在啟動一個運行bash腳本的容器,該腳本使用Centos 7.0.1406上的docker 1.3.2在內部進行docker構建。 文件/命令位於https://gist.github.com/wrabbit-revisited/1d70d0f1805be1848c08 。
docker build需要訪問docker socket,所以我使用了一個常見的技巧,如http://nathanleclaire.com/blog/2014/07/12/10-docker-tips-and-tricks-that-will-make-你唱一首鯨魚之歌/ :
-v /var/run/docker.sock:/var/run/docker.sock
在構建之前,我在腳本中運行檢查:
if [ -e "/var/run/docker.sock" ];
then
echo "docker.sock found"
else
echo "docker.sock not found"
fi
並且“echo”顯示找不到docker.sock。 如果使用sudo在容器外部進行檢查,則會發現。
我嘗試在“docker run”命令行中添加“--permissive = true”,但沒有明顯的變化。
這里有一些類似問題的參考: https : //github.com/dpw/selinux-dockersock 。 它針對Fedora / RHEL,但也沒有解決這個問題。 如果我使用“setenforce Permissive”和sestatus來確保selinux處於許可模式,問題仍未得到解決。
我還嘗試將“--security-opt = label:type:docker_t”添加到docker命令行,按照https://github.com/jwilder/nginx-proxy/issues/40 。 沒有明顯的效果。
這里描述了Docker的selinux策略: http : //www.unix.com/man-page/centos/8/docker_selinux/ 。
很多信息,但我不確定selinux是否有助於解決問題。 如果我編輯/ etc / selinux / config以禁用selinux然后重新啟動並運行sestatus它說selinux被禁用,但問題仍然存在。
看,它可能與此有關: https : //github.com/docker/compose/issues/983 。 使用這個技巧在容器內運行docker是很常見的,但也許有更好的方法來做到這一點或一個好的解決方法。 我認為是dind,但這是工作,這是一個廣泛使用的,簡單的(表面上),在容器內運行docker構建的方法。 可能有一個簡單的解決方案。
任何幫助,將不勝感激! 謝謝
我認為您的問題可能是由於對docker run
的-v
選項的誤解。 你說你做到了
-v /var/run/docker:/var/run/docker
這將在容器中為文件或目錄/var/run/docker
創建綁定裝入。 但在你的情況下,沒有這樣的文件或目錄。 你想要文件/var/run/docker.sock
。 所以你需要這樣做
-v /var/run/docker.sock:/var/run/docker.sock
將該文件掛載到容器中。
由於/var/run/docker
不存在,您可能想知道為什么docker沒有告訴您有關錯誤的信息。 但是-v
選項具有令人驚訝的行為,如果主機上不存在該路徑,則docker會將其創建為目錄。 所以你最終在主機和容器上有一個無用的空/var/run/docker
目錄。
原則上,您也可以執行-v /var/run:/var/run
來綁定掛載包含目錄。 但是,給容器訪問主機的/var/run
目錄樹可能是一個壞主意。
當您使用CentOS時,您還需要使用https://github.com/dpw/selinux-dockersock訪問/var/run/docker.sock,以便在執行模式下使用SELinux。
從長遠來看,確認安裝https://github.com/dpw/selinux-dockersock就足夠了。
一個快速的替代方法是在啟動容器時傳遞--privileged
參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.