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卷上的文件夹,因为在稍后运行时(容器)会安装卷。