Docker将文件添加到VOLUME

bla*_*011 9 docker dockerfile

我有一个Dockerfile将一些文件复制到容器中,然后创建一个VOLUME.

...
ADD src/ /var/www/html/
VOLUME /var/www/html/files
...
Run Code Online (Sandbox Code Playgroud)

src文件夹中是一个文件夹,在这个文件夹中是我需要在容器第一次启动时复制到VOLUME的一些文件.

我认为第一次创建容器时它会使用卷中指定的原始目录的内容,但事实并非如此.

那么如何将文件存入此文件夹?我是否需要创建一个额外的文件夹并使用脚本复制它(我希望不是)?

Seb*_*ian 10

无论你在Dockerfile中放置什么,都只是在构建时进行评估(而不是在创建新容器时).

如果要从容器中可用的主机创建文件,请使用数据卷:

docker run -v /host_dir:/container_dir ...
Run Code Online (Sandbox Code Playgroud)

如果您只想将文件从主机复制到容器作为一次性操作,您可以使用:

docker cp /host_dir mycontainer:/container_dir
Run Code Online (Sandbox Code Playgroud)

  • 我想在构建时添加文件,因此文件夹中有初始文件。但是我想通过数据卷使这个文件夹对我的主机可用。所以应该将初始文件放入数据卷中。我可以通过容器中的启动脚本复制文件,但我希望有一个更优雅的解决方案。如果没有,我将通过脚本来完成 (2认同)

Sla*_*lag 6

问题出在您的 ADD 语句上。此外,您可能不了解如何访问卷。将您的努力与下面的演示进行比较:

FROM alpine #, or your favorite tiny image
ADD src/files /var/www/html/files
VOLUME /var/www/html/files
Run Code Online (Sandbox Code Playgroud)

构建一个名为“dataimg”的图像:

docker build -t dataimg .
Run Code Online (Sandbox Code Playgroud)

使用 dataimg 图像创建一个名为“datacon”的数据容器:

docker run --name datacon dataimg /bin/cat
Run Code Online (Sandbox Code Playgroud)

将 datacon 中的卷挂载到 nginx 容器中:

docker run --volumes-from datacon nginx ls -la /var/www/html/files
Run Code Online (Sandbox Code Playgroud)

你会看到 /var/www/html/files 的列表反映了 src/files 的内容