我想使用 docker 在本地运行 jenkins 并运行一个拉取和构建 docker 容器的管道。我有一个 Dockerfile:
FROM jenkins/jenkins:lts-jdk11
USER root
RUN apt update && curl -fsSL https://get.docker.com | sh
RUN usermod -aG docker jenkins
USER jenkins
我用以下方法构建它:
docker build . -t ltscustomjenkins
我用 docker run -dit --restart=always -p 8080:8080 -p 50000:50000 -v jenkins_home:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock ltscustomjenkins
运行它
然后我在本地主机上注册 jenkins 并安装推荐的更新。 我构建了另一个 Dockerfile:
FROM jenkins/agent
USER root
RUN apt update && curl -fsSL https://get.docker.com | sh
RUN usermod -aG docker jenkins
USER jenkins
并将其运行为
docker build . -t jenkinsagent
我安装命令代理启动器插件。我添加了一个名为 dockeragent 的新节点。作为远程根目录,我使用:/home/jenkins/agent,启动方法:通过在控制器上执行命令来启动代理。我的启动命令是
docker run -i --rm --name agent -v /var/run/docker.sock:/var/run/docker.sock --init jenkinsagent java -jar /usr/share/jenkins/agent.jar
当我想启动代理时,出现错误:
$ docker run -i --rm --name agent -v /var/run/docker.sock:/var/run/docker.sock --init jenkinsagent java -jar /usr/share/jenkins/agent.jar
docker: permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Head "http://%2Fvar%2Frun%2Fdocker.sock/_ping": dial unix /var/run/docker.sock: connect: permission denied.
See 'docker run --help'.
ERROR: Unable to launch the agent for dockeragent
java.io.EOFException: unexpected stream termination
at hudson.remoting.ChannelBuilder.negotiate(ChannelBuilder.java:459)
at hudson.remoting.ChannelBuilder.build(ChannelBuilder.java:404)
at hudson.slaves.SlaveComputer.setChannel(SlaveComputer.java:440)
at hudson.slaves.CommandLauncher.launch(CommandLauncher.java:170)
at hudson.slaves.SlaveComputer.lambda$_connect$0(SlaveComputer.java:297)
at jenkins.util.ContextResettingExecutorService$2.call(ContextResettingExecutorService.java:46)
at jenkins.security.ImpersonatingExecutorService$2.call(ImpersonatingExecutorService.java:80)
at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)
ERROR: Process terminated with exit code 126
据我研究,在我的 dockerfiles 中使用“RUN usermod -aG docker jenkins”应该足够了,但我仍然收到此错误。任何想法都会受到赞赏。谢谢!
问题是主机中的 docker 组与 Jenkins 容器内创建的 docker 组具有不同的组 ID。
你可以尝试: