为什么不能在Dockerfile中工作?

我的Dockerfile创build一个目录,chown的,然后列出目录。 该目录仍然由root拥有。 这是为什么?

这是Dockerfile:

FROM ubuntu:precise RUN useradd -d /home/testuser -m -s /bin/bash testuser RUN mkdir -p /var/local/testrunner/logs VOLUME ["/var/local/testrunner/logs"] RUN grep testuser /etc/passwd RUN grep root /etc/passwd RUN chown -R testuser:testuser /var/local/testrunner/logs RUN ls -ld /var/local/testrunner/logs 

这里是“docker build”的输出:

 Sending build context to Docker daemon 10.24 kB Sending build context to Docker daemon Step 0 : FROM ubuntu:precise ---> ab8e2728644c Step 1 : RUN useradd -d /home/testuser -m -s /bin/bash testuser ---> Using cache ---> 640f12671c86 Step 2 : RUN mkdir -p /var/local/testrunner/logs ---> Using cache ---> bf7756fd5b1f Step 3 : VOLUME ["/var/local/testrunner/logs"] ---> Using cache ---> 65c73ee76c20 Step 4 : RUN grep testuser /etc/passwd ---> Using cache ---> db72fff0b965 Step 5 : RUN grep root /etc/passwd ---> Running in ebff78df7a9a root:x:0:0:root:/root:/bin/bash ---> ead0ff704a59 Removing intermediate container ebff78df7a9a Step 6 : RUN chown -R testuser:testuser /var/local/testrunner/logs ---> Running in c925f67b2ab4 ---> 253132be935e Removing intermediate container c925f67b2ab4 Step 7 : RUN ls -ld /var/local/testrunner/logs ---> Running in 978bc66aa47e drwxr-xr-x 2 root staff 4096 Oct 1 15:15 /var/local/testrunner/logs 

Docker版本1.2.0,构buildfa7b24f

主机运行Ubuntu 12.04,但使用3.13.0-36-通用内核。

回答我自己的问题:它被宣布为一个卷。 如果您取出VOLUME指令,则chown生效。

而且,如果运行chown 之后声明音量,则chown设置将保持有效。

这个博客http://container42.com/2014/11/03/docker-indepth-volumes/详细解释了这个行为。

Dockerfile中的每条指令创build一个新的容器。 该指令对此容器进行了一些更改,并成为新的一层。 在VOLUME指令之前对“/ var / local / testrunner / logs”所做的更改是针对实际的容器文件系统进行的。 但是,在VOLUME指令之后,目录“/ var / local / testrunner / logs”是安装的目录。 VOLUME指令后对此目录所作的更改将应用​​于挂载的目录,而不是实际的容器文件系统。