将配置.txt从主机服务器复制到 docker 容器时出现问题



所以谷歌让我失望了,所以我希望你们这些好人能够有所了解。

我正在尝试使用 Docker 创建一个自定义的 Jenkins Dockerfile,其中的配置设置为具有"预烘焙"的 Jenkins 设置,我们可以在不同的项目中使用。

每当我尝试使用 COPY 命令将配置.xml复制到/var/jenkins_home/jobs 文件夹中时,它就是不这样做。它没有显示错误,只是当我登录到容器或检查主机服务器上的卷存储(相同位置/var/jenkins_home/jobs (时,它不存在。

我的猜测是这与 jenkins 映像中的 WORKDIR 有关,但我不是 docker 专家。我能够将配置.xml添加到主机服务器上的卷中,它工作正常,但我想要一个准备好的映像。

我已经在下面粘贴了我的 Dockerfile,我从位于/opt/jenkins_config 的目录运行它:

FROM jenkins/jenkins:lts
## Change to root user
USER root
## Name the jobs
ARG job_name_1=Generate-Key
ARG job_name_2=Generate-Stack
## Create the job workspaces
RUN mkdir -p "$JENKINS_HOME"/workspace/${job_name_1}
RUN mkdir -p "$JENKINS_HOME"/workspace/${job_name_2}
## Create the jobs folder recursively
RUN mkdir -p "$JENKINS_HOME"/jobs/${job_name_1}
RUN mkdir -p "$JENKINS_HOME"/jobs/${job_name_2}
RUN ls -ltr "$JENKINS_HOME"/jobs/
## Add the custom configs to the container
COPY configs/${job_name_1}/config.xml "$JENKINS_HOME"/jobs/${job_name_1}/config.xml
COPY configs/${job_name_2}/config.xml "$JENKINS_HOME"/jobs/${job_name_2}/config.xml
## Create build file structure
RUN mkdir -p "$JENKINS_HOME"/jobs/${job_name_1}/latest/
RUN mkdir -p "$JENKINS_HOME"/jobs/${job_name_1}/builds/1/
## Create build file structure
RUN mkdir -p "$JENKINS_HOME"/jobs/${job_name_2}/latest/
RUN mkdir -p "$JENKINS_HOME"/jobs/${job_name_2}/builds/1/
## Change ownership to jenkins user
RUN chown ${uid}:${gid} $JENKINS_HOME

在您的情况下,COPY configs/${job_name_1}/config.xml "$JENKINS_HOME"/jobs/${job_name_1}/config.xml将转换为下一步:

COPY /opt/jenkins_config/configs/Generate-Key/config.xml /var/jenkins_home/jobs/Generate-Key/config.xml

正如你接下来所说:

当我检查主机服务器上的卷存储时(同一位置/var/jenkins_home/jobs(。

所以当docker run我想你定义一个绑定挂载,如下所示:

-v /var/jenkins_home/jobs:/var/jenkins_home/jobs

如果以上与您的情况相同,那么事情很清楚:

docker build时,config.xml已经成功地复制到带有位置/var/jenkins_home/jobs/Generate-Key/config.xml的图像,所以你肯定没有错误。

当您执行docker run时出现问题,-v /var/jenkins_home/jobs:/var/jenkins_home/jobs不会将容器中的内容弹出到主机,它只会将主机上的文件夹挂载到容器,这意味着主机文件夹将覆盖容器中的同一文件夹,因此之前复制到映像config.xml被空主机文件夹覆盖。所以你什么也看不到,你可以验证它,而无需定义-v和exec到容器进行检查。

最新更新