运行容器时文件不存在,但是构建Docker映像时文件存在

时间:2019-05-16 07:05:40

标签: docker jenkins ssh

如果我使用:

FROM jenkins/jenkins:lts
RUN ls -l /var/jenkins_home/; touch /var/jenkins_home/isthisworking; echo "================================"; ls -l /var/jenkins_home;

在构建映像的最后一个isthisworking命令中,我实际上看到了ls -l。在运行容器时,将删除此文件。为什么?

2 个答案:

答案 0 :(得分:1)

  1. 如果要为该用户修改ssh资源,请使用“ USER jenkins”

  2. 您尝试从不属于您的docker容器的网络中获取IP。您的docker容器上的主机是两个分割的网络

答案 1 :(得分:0)

我想我知道发生了什么事。这是我用来弄清楚发生了什么的Dockerfile(从上面复制):

FROM jenkins/jenkins:lts
RUN ls -l /var/jenkins_home/; touch /var/jenkins_home/isthisworking; echo "================================"; ls -l /var/jenkins_home;

如前所述,有了该文件,在构建时,我会看到文件isthisworking,但是当我运行容器时,该文件不再存在。

因此,我去了jenkins / jenkins:lts github页面,并查看了他们的Dockerfile。我在第26行看到了this

# Jenkins home directory is a volume, so configuration and build history
# can be persisted and survive image upgrades
VOLUME $JENKINS_HOME

在这里,$JENKINS_HOME/var/jenkins_home/。因此,作为Docker菜鸟,我问自己VOLUME是什么(我从命令行知道它是什么,但在Dockerfile内部却不知道)?通过谷歌搜索,我发现thisthis基本上说:

  

docker run命令使用以下命令初始化新创建的卷   基本图片中指定位置上存在的数据。

这回答了我所有的问题。由于该位置是一个VOLUME,所以无论我以何种方式以及如何将文件复制到其中,在容器运行时,该位置都将重新初始化为基础图像是如何“定义”的。