Docker卷 – 自动添加文件

我正在尝试创build一个包含多个文件夹的外部容器的Docker容器,所以我的简化版Dockerfile如下所示:

FROM ubuntu:12.04 # Create a volume for externally stored data that will persist across containers. VOLUME ["/uploads"] # Add the subfolders we need if they dont already exist # however this never works. RUN mkdir /uploads/folder1 RUN mkdir /uploads/folder2 

每当我启动容器

 sudo docker run -i -t -v /uploads:/uploads [IMAGE ID] /bin/bash 

/ uploads文件夹不包含folder1或folder2。 但是,如果我将VOLUME上传行replace为RUN mkdir /uploads ,则可以使用此命令

 sudo docker run -i -t [IMAGE ID] /bin/bash 

但没有这个命令(文件夹再次丢失):

 sudo docker run -i -t -v /uploads:/uploads [IMAGE ID] /bin/bash 

如何设置dockerfile以便在运行容器时自动将文件/文件夹添加到主机挂载的目录中?

如何设置dockerfile以便在运行容器时自动将文件/文件夹添加到主机挂载的目录中?

你没有。 Dockerfile用于创build图像,以设置图像的内容。 您可以直接在shell中设置挂载的目录的内容:

 # create folders: mkdir /uploads123 mkdir /uploads123/folder1 mkdir /uploads123/folder2 # run container docker run -i -t -v /uploads123:/uploads [IMAGE ID] /bin/bash # for this trivial case, you can use directly ubuntu image, # it works, no need for Dockerfile 

或者 ,您可以设置一些安装脚本在启动主进程之前在容器中运行。 此安装脚本可以使用所需的文件夹填充装入的卷。

解释行为 – 您的命令RUN mkdir /uploads/folder1确实在映像中创build了该文件夹,但是您使用装入的卷映射了该文件夹,因此您看不到此文件夹(文件夹在映像中,而不在主机文件夹中) 。 您不能在Dockerfile中创build卷上的文件夹,因为在稍后运行时(容器)会安装卷。

    Interesting Posts