【发布时间】:2015-03-16 23:55:37
【问题描述】:
我正在启动一个容器,该容器运行一个 bash 脚本,该脚本在 Centos 7.0.1406 上使用 docker 1.3.2 在内部进行 docker 构建。文件/命令位于https://gist.github.com/wrabbit-revisited/1d70d0f1805be1848c08。
docker build 需要访问 docker 套接字,所以我使用了一个常用技巧,根据 http://nathanleclaire.com/blog/2014/07/12/10-docker-tips-and-tricks-that-will-make-you-sing-a-whale-song-of-joy/ :
-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 处于许可模式,则问题仍未解决。
我还尝试按照 https://github.com/jwilder/nginx-proxy/issues/40 将“--security-opt=label:type:docker_t”添加到 docker 命令行。没有明显效果。
这里描述了 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 是很常见的,但也许有更好的方法来做到这一点或一个好的解决方法。我考虑过,但这是可行的,这是一种在容器内运行 docker build 的广泛使用、简单(表面上)的方法。可能有一个简单的解决方案。
任何帮助将不胜感激! 谢谢
【问题讨论】:
-
刚刚在 ubuntu 14.04 桌面上使用 docker 1.2.0 尝试过。在容器中运行的 build.sh 能够找到 /var/run/docker.sock 所以这个问题似乎是 Centos 7 特有的。顺便说一句,在构建 docker 映像之前必须使 build.sh 可执行。
-
我们能够通过使用
--privileged标志让 DockerUI 在 RHEL/CentOS 上运行。这有点像大锤,我很高兴了解更好的方法。 -
是的.. 目前 Docker 是一个移动的目标,尤其是在安全方面。目前对我来说不是一个障碍 - 我搬到了 Ubuntu 14.04 以避免这个问题。
标签: sockets docker selinux centos7