Jenkins在Docker容器中(运行Docker流水线)

12
我想在Docker容器中运行Jenkins。一切都很顺利,我可以通过以下方式运行它:docker run -d --name jenkins -t -i -p 49001:8080 jenkins。我还可以添加持久存储。当我创建一个需要执行docker命令(buildpush)的管道时,问题出现了。首先出现的错误是系统上未安装docker。是的,这是预期的。然后我开始搜索并找到了如何在容器中运行docker(传递2个持久卷)的方法:docker run ... -v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):/usr/bin/docker -p 49001:8080 jenkins
这样可以运行,但是会有一些异常。容器中有docker命令,但是当我尝试运行它时,它会抛出异常:docker: error while loading shared libraries: libltdl.so.7: cannot open shared object file: No such file or directory
如何解决这个问题?安装Jenkins和在其中运行Docker的正确方法是什么?我认为有两种方法:
  1. 我正在使用的方法-使用sockets
  2. 我可以公开允许连接和运行命令的docker api
实际上,在Docker中运行Jenkins值得吗?我尝试从apt-get手动安装缺失的库,这样可以解决问题,但我知道这不是正确的方法。

这篇文章https://www.vip-consult.solutions/post/easy-docker-swarm-jenkins-continuous-deployment-at-scale#content有帮助吗? - VonC
2个回答

19

为了让一切正常运行,你需要安装 libltdl-dev。创建一个如下所示的 Dockerfile

FROM jenkins:latest

USER root
RUN apt-get update \
      && apt-get upgrade -y \
      && apt-get install -y sudo libltdl-dev \
      && rm -rf /var/lib/apt/lists/*
RUN echo "jenkins ALL=NOPASSWD: ALL" >> /etc/sudoers

USER jenkins
# Here you can install some Jenkins plugins if you want

1
我创建了一个简单的解决方案图像 https://hub.docker.com/r/jesusperales/jenkins-docker-run-inside/ - Israel Perales
1
感谢提供图片。 - NIrav Modi
@kirpt rm -rf /var/lib/apt/lists/* 是用来做什么的? - Wayneio

0

这里是来自 @Israel Perales Docker 镜像的简单更新,因为上面那个已经不再可用了。

   FROM jenkins/jenkins:lts


    USER root
    RUN apt-get update \
          && apt-get upgrade -y \
          && apt-get install -y sudo libltdl-dev libnss3 \
          && rm -rf /var/lib/apt/lists/*
    RUN echo "jenkins ALL=NOPASSWD: ALL" >> /etc/sudoers

    USER jenkins

构建 Docker 镜像并按以下方式运行:

$ docker build -t docIndoc .

$ docker run --name jenkins -d -p 8080:8080 -p 50000:50000 -v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):$(which docker) docIndoc

$ docker exec -it jenkins /bin/bash

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接