Docker Volumes - 自动添加文件

时间:2014-04-17 11:16:36

标签: volume docker

我正在尝试创建一个具有外部卷的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。但是,如果我用RUN mkdir /uploads替换VOLUME上传行,则它可以使用此命令

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

但没有使用此命令(文件夹再次丢失):

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

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

1 个答案:

答案 0 :(得分:11)

  

如何设置dockerfile以便文件/文件夹   在运行时自动添加到主机安装目录   容器?

你不是。 Dockerfile用于创建图像,以设置图像的内容。您可以直接在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确实在图像中创建了文件夹,但您阴影已装入卷的文件夹,因此您看不到此文件夹(文件夹位于图像,而不是在主机文件夹中)。您无法在Dockerfile中的卷上创建文件夹,因为稍后会在运行时装入卷(容器)。