将config.txt从主机服务器复制到Docker容器时出现问题

时间:2019-07-24 18:23:31

标签: docker jenkins dockerfile

所以google已经使我失败了,所以我希望大家能有所启发。

我正在尝试使用Docker创建一个自定义Jenkins Dockerfile,并对其配置进行设置,以使我们可以在不同项目中使用“预烘焙” Jenkins设置。

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

我的猜测是,这与jenkins映像中的WORKDIR有关,但我不是Docker方面的专家。我可以将config.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

1 个答案:

答案 0 :(得分:0)

根据您的情况,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的情况下进行验证来进行检查。