问题
我一直在使用fabric 8 maven插件来构建docker镜像。我的用户是Docker组的一员,一切都很好。
我最近有一台“新的更锁定”的工作电脑,必须运行“sudo”来构建docker镜像。
但是,运行fabric 8 maven构建时失败,并出现错误:
Execution default of goal io.fabric8:docker-maven-plugin:0.43.4:build failed: No <dockerHost> given, no DOCKER_HOST environment variable, no read/writable '/var/run/docker.sock' or '//./pipe/docker_engine' and no external provider like Docker machine configured
我的docker引擎在我的本地主机上运行,并且/var/run/docker.sock可用但不可写:
ls -al /var/run/docker.sock
srwxr-xr-x 1 root root 0 Oct 9 22:53 /var/run/docker.sock
我可以'sudo docker build.'(我有一些项目使用mvn exec而不是fabric 8,它们仍然可以工作)。
**我不知道fabric 8是否可以配置为以某种方式使用'sudo'来完成它的工作。
额外的细节和我尝试过的事情
我们实际上创建了一些dockerized的“构建镜像”,我们使用它们来为所有开发人员执行项目构建。(每个人都使用相同的环境、依赖关系等)
我们启动构建容器,在源代码和Docker套接字中安装,用户可以从内部执行构建。* 我们将用户ID/GID传递给容器,并使用这些ID在容器中设置用户,以便构建输出具有适当的所有权。这几年来效果一直很好。
这些新的“锁定”系统以我不理解的方式处理Docker套接字。
- 在我的Mac上,作为我自己的用户,我可以使用Docker插件(w/o sudo)。
- 在容器内部(安装了docker socket,并使用uid/gid设置了用户),我无法运行docker命令。
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json": dial unix /var/run/docker.sock: connect: permission denied
- 我可以'sudo'来执行docker命令,所以我将我的用户添加到/etc/sudoers,并将“docker”别名为“sudo docker”
*一切都像以前一样工作,除了尝试使用fabric 8插件进行docker构建。使用mvn-exec插件执行的Docker构建工作良好。 - 只要我是容器中的root用户,我就可以成功运行构建(不需要sudo)。然而,这不是一个好的解决方案,因为其他构建输出将具有错误的所有权0/0,并且处理起来很痛苦。
1条答案
按热度按时间ecbunoof1#
经过一天的搜索堆栈溢出,我发现this question对我的特定情况有帮助。
我们的构建容器的入口点从docker命令行获取传入的UID/GID,并以root身份设置该用户,然后切换到该用户以执行构建命令。(小工具gosu)
我发现,在容器中设置用户后,可以chown myuser:mygroup /var/run/docker.sock。完成后,“myuser”现在可以本地执行docker命令。
我有点震惊,因为在我的主机上,/var/run/docker.sock是到/Users//.docker/run/docker. sock的软链接。我安装了/var/run/docker. sock。某种mac/docker魔法正在进行中。