我在一个Docker容器中运行一个Jenkins实例,它连接到一个BitBucket存储库。当在线资源库发生变化时,Jenkins会下载新的源代码。基于新来源,我想创建一个新的Docker镜像,但是这需要在主机上进行,因为它是我安装Docker的地方。如何在Docker容器中运行Jenkins时在主机上构建?
我还没弄清楚如何在主机上运行某些东西,但同时我明白Docker用于隔离进程,所以这是设计。有没有办法做到这一点?
我在一个Docker容器中运行一个Jenkins实例,它连接到一个BitBucket存储库。当在线资源库发生变化时,Jenkins会下载新的源代码。基于新来源,我想创建一个新的Docker镜像,但是这需要在主机上进行,因为它是我安装Docker的地方。如何在Docker容器中运行Jenkins时在主机上构建?
我还没弄清楚如何在主机上运行某些东西,但同时我明白Docker用于隔离进程,所以这是设计。有没有办法做到这一点?
我将创建一个单独的Jenkins slave,映射到运行Jenkins的主机或安装了Docker的单独主机。然后运行你的工作,在从服务器而不是主服务器上创建Docker镜像。
official Jenkins Docker image的文档有关于如何连接从站的详细信息。
可以使用Jenkins容器内的主机使用Docker。您需要在容器上安装Docker,然后映射主机的docker套接字描述符。
样品Dockerfile将实现这一点看起来是这样的:
FROM jenkins/jenkins:2.102
USER root
RUN apt-get update && \
apt-get install -y \
apt-transport-https \
software-properties-common
# Docker
RUN curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - && \
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable" && \
apt-get update && apt-get install -y docker-ce && \
usermod -aG docker,staff jenkins
# Set SUID to run docker as root
RUN chmod g+s /usr/bin/docker
USER jenkins
要根据与码头工人在该图像上运行容器工作,你需要映射docker.sock文件描述符:
docker run -p 8080:8080 -v /var/run/docker.sock:/var/run/docker.sock my-image
如果你不想建立新的图像,你可以使用我的预建图像:https://hub.docker.com/r/mdobak/docker-jenkins/
谢谢你的答复河我想在Docker中使用Jenkins,这样我就不需要将它安装在主机上。在主机上安装一个Jenkins slave会失败目的。 – Demetris