我让Jenkins在Docker容器中运行。主目录位于主机卷中,以确保在对容器进行更新时保留构建历史记录。
我更新了容器,在主目录中创建了一个附加文件。拉出新容器时,我看不到更改的文件。
ENV JENKINS_HOME=/var/jenkins_home
RUN mkdir -p ${JENKINS_HOME}/.m2
COPY settings.xml ${JENKINS_HOME}/.m2/settings.xml
RUN chown -R jenkins:jenkins ${JENKINS_HOME}/.m2
VOLUME ["/var/jenkins_home"]
我正在运行这样的容器:
docker run -v /host/directory:/var/jenkins_home -p 80:8080 jenkins
我之前运行过Jenkins,因此主机上已存在主目录。当我拉新容器并运行它时,我发现文件.m2/settings.xml
未创建。为什么这样呢?
答案 0 :(得分:1)
基本上当你跑步时:
docker run -v /host-src-dir:/container-dest-dir my_image
您会将/container-dest-dir
与/host-src-dir
来自Docs
$ docker run -d -P --name web -v /src/webapp:/webapp training/webapp python app.py
此命令将主机目录/ src / webapp安装到 容器at / webapp。如果路径/ webapp已经存在于 容器的图像,/ src / webapp挂载覆盖但不删除 预先存在的内容。删除安装后,内容就是 再次访问。这符合预期的行为 mount命令。
此SO问题也与docker mounting volumes on host
相关似乎你想要反过来(即容器是源,主机是目的地)。
这是一种解决方法:
在Dockerfile中创建卷
在没有-v
的情况下运行它,即:docker run --name=my_container my_image
运行docker inspect --format='{{json .Mounts}}' my_container
这将为您提供类似于:
[{"Name":"5e2d41896b9b1b0d7bc0b4ad6dfe3f926c73","Source":"/var/lib/docker/volumes/5e2d41896b9b1b0d7bc0b4ad6dfe3f926c73/_data","Destination":"/var/jenkins_home","Driver":"local","Mode":"","RW":true,"Propagation":""}]
这意味着您在容器上的目录已安装到主目录/var/lib/docker/volumes/5e2d41896b9b1b0d7bc0b4ad6dfe3f926c73/_data
不幸的是,我不知道如何让它安装在特定的主机目录上。