从Dockerfile

时间:2017-05-10 18:06:40

标签: git docker jenkins

我正在尝试创建一个Jenkins映像,该映像从包含一些预配置作业的私有存储库中提取目录,并在仪表板上显示这些作业。我创建了一个Dockerfile,它将构建一个Jenkins映像,可以将目录从我的私有仓库中拉入Jenkins容器。

但是,这些拉出的作业不会出现在 / var / jenkins_home / jobs 中,因此Jenkins不会在仪表板上显示作业。

这是Dockerfile的一般内容:

FROM jenkins:latest

ENV JAVA_OPTS -Djenkins.install.runSetupWizard=false

USER root
RUN mkdir -p /var/jenkins_home/jobs/
WORKDIR /var/jenkins_home/jobs/
RUN "pull jobs directory from here" \
    ls -lah;
WORKDIR /
USER jenkins

当我拉出jobs目录时,我只能将它拉到 / var 中,但不能在 / var / jenkins_home / / var / jenkins_home / jobs 目录。

我怀疑这个问题与在Jenkins图像中创建目录的方式有关,其中 / var / jenkins_home 目录在构建图像的某个时刻被覆盖。

我检查了相关帖子here,但我不想将任何本地文件夹与图像文件夹绑定。但这个想法密切相关。

谢谢你的时间。

1 个答案:

答案 0 :(得分:0)

base Dockerfile通过以下指令将/ var / jenkins_home设置为卷:

VOLUME /var/jenkins_home

使得此目录的行为与图像中的普通目录不同,结果是您无法在Dockerfile中写入此目录,就像您在提取预配置作业时尝试的那样。

问题在a post called Docker In-depth: Volumes中有更详细的描述,但是TLDR;是这样的:

FROM debian:jessie
VOLUME /foo/bar
RUN touch /foo/bar/baz
# /foo/bar/baz doesn't exist