无法使用安装了 Docker 的代理在 Docker 容器上本地运行 Jenkins

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

我想使用 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 dockerfile jenkins-pipeline
1个回答
0
投票

问题是主机中的 docker 组与 Jenkins 容器内创建的 docker 组具有不同的组 ID。

你可以尝试:

  • 编辑 Dockerfile 添加命令以删除 docker 安装脚本创建的 docker 组;
  • 从您的主机创建一个具有相同 ID 的新 docker 组。在主机的终端中使用命令“cat /etc/group”来查看哪个 ID 具有 docker 组。
© www.soinside.com 2019 - 2024. All rights reserved.