【发布时间】:2016-07-11 03:34:46
【问题描述】:
我想在 docker 容器中运行 Jenkins 实例。
我希望 Jenkins 本身能够启动 docker 容器作为从属来运行测试。
似乎最好的方法是使用
docker run -v /var/run.docker.sock:/var/run/docker.sock -p 8080:8080 -ti my-jenkins-image
我使用的Dockerfile是
FROM jenkins
COPY plugins.txt /usr/share/jenkins/plugins.txt
RUN /usr/local/bin/plugins.sh /usr/share/jenkins/plugins.txt
USER root
RUN apt-get update && apt-get install -y docker.io
RUN usermod -aG docker jenkins
USER jenkins
如果我在正在运行的容器中启动 bash 会话并在我的图像上运行 docker info,我会得到 p>
$ docker info
FATA[0000] Get http:///var/run/docker.sock/v1.18/info: dial unix /var/run/docker.sock: permission denied. Are you trying to connect to a TLS-enabled daemon without TLS?
如果我以 root 身份运行 bash 会话
docker exec -u 0 -ti cocky_mccarthy bash
root@5dbd0efad2b0:/# docker info
Containers: 42
Images: 50
...
所以我猜我要添加 Jenkins 用户的 docker 组是内部 docker 的组,因此如果没有 sudo,套接字将无法读取。这是一个问题,因为 Jenkins docker 插件等未设置为使用 sudo。
如何安装套接字,以便在没有sudo 的情况下从图像中使用它?
【问题讨论】:
-
您找到解决问题的方法了吗?我现在也面临同样的问题
-
我的解决方案是在容器启动后更改 docker.sock 的所有权。
docker exec -it -u root jenkins-docker chown jenkins /var/run/docker.sock
标签: docker jenkins dockerfile jenkins-docker