如何配置 Fabric8 Maven 插件以使用 sudo 进行构建

问题描述 投票:0回答:1

问题

我一直在使用fabric8 maven插件来构建docker镜像。我的用户是 docker 组的一部分,一切正常。

我最近获得了一台“新的更加锁定”的工作计算机,并且必须运行“sudo”来构建 docker 映像。

运行fabric8 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 而不是 Fabric8,它们仍然可以工作)。

我不知道是否可以将 Fabric8 配置为以某种方式使用“sudo”来完成其工作。

额外的细节和我尝试过的事情

我们实际上创建了一些 Docker 化的“构建映像”,用于为所有开发人员执行项目构建。 (每个人都使用相同的环境、依赖项等)

我们启动构建容器,安装在源和docker套接字中,用户可以从内部执行构建。 我们将用户 ID/GID 传递到容器,并使用这些 ID 在容器中设置用户,以便构建输出具有适当的所有权。。这几年来效果一直很好。

这些新的“锁定”系统以我不理解的方式处理 docker 套接字。

  • 在我的 Mac 上,作为我自己的用户,我可以按原样使用 docker cli(无需 sudo)。
  • 在容器内(安装了 docker 套接字并使用我的 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”
  • 除了尝试使用fabric8插件进行docker构建之外,一切都像以前一样工作。使用 mvn-exec 插件执行的 Docker 构建效果很好。
  • 只要我是容器中的 root 用户(无需 sudo),我就可以成功运行构建。然而,这不是一个好的解决方案,因为其他构建输出将具有错误的所有权 0/0 并且处理起来很痛苦。
docker maven sudo fabric8
1个回答
0
投票

经过一天的堆栈溢出搜索,我发现这个问题对我的具体情况有帮助。

我们的构建容器的入口点从 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 wizadry 正在幕后进行。

© www.soinside.com 2019 - 2024. All rights reserved.