我试图了解容器何时将预先存在的文件复制到同一目录中的已装入卷中。例如
FROM ubuntu
RUN mkdir /testdir
RUN echo "Hello world" > /testdir/file.txt
运行:
#docker create volume vol
#docker run -dit -v vol:/testdir myimage
#docker exec -it 900444b7ab86 ls -la /testdir
drwxr-xr-x 2 root root 4096 May 11 18:43 .
drwxr-xr-x 1 root root 4096 May 11 18:43 ..
-rw-r--r-- 1 root root 6 May 11 17:53 file.txt
例如,图像中还有以下文件:
# docker exec -it 900444b7ab86 ls -la /etc/cron.daily
total 20
drwxr-xr-x 2 root root 4096 Apr 26 21:17 .
drwxr-xr-x 1 root root 4096 May 11 18:43 ..
-rwxr-xr-x 1 root root 1478 Apr 20 10:08 apt-compat
-rwxr-xr-x 1 root root 1176 Nov 2 2017 dpkg
-rwxr-xr-x 1 root root 249 Jan 25 15:09 passwd
但是例如当我用
运行它时docker run -it 900444b7ab81 -v vol:/etc/cron.daily
目录现在为空..
为什么这次没有复制文件?
答案 0 :(得分:0)
#docker run -dit -v vol:/testdir
这不是一个有效的docker命令,没有包含图像引用,所以没有什么可以让docker运行。
docker run -it 900444b7ab81 -v vol:/etc/cron.daily
这将尝试使用命令900444b7ab81
运行图像-v vol:/etc/cron.daily
。在您拥有一个具有非常相似ID的容器ID之前,所以您不会尝试使用容器ID而不是图像ID进行运行。并且容器内可能不存在命令-v
。
这些参数的顺序很重要,run
之后的第一个不是选项或前一个选项的arg被视为图像引用。在该引用之后,传递的任何其他内容都是在容器中运行的命令。因此,如果要安装卷,则需要在图像ID之前移动该选项。
我正在尝试了解容器何时将预先存在的文件复制到同一目录中的已装入卷中。
对于命名卷,docker在创建容器时初始化一个空的命名卷,其中包含该位置的图像内容。一旦卷中包含文件,它将在任何后续使用中按原样映射到容器中,因此不会看到对同一位置的图像的更改。