2017-05-05 97 views
4

我有一个Dockerfile它将一些文件复制到容器中,然后创建一个VOLUME。Docker添加文件到VOLUME

... 
ADD src/ /var/www/html/ 
VOLUME /var/www/html/files 
... 

src文件夹是一个文件夹,并在该文件的文件夹是一些文件,我需要复制到卷首次容器被启动。

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

那么我怎样才能获得文件到这个文件夹? 我是否需要创建一个额外的文件夹并将其与一个脚本复制(我不希望)?不管你把你的Dockerfile

+0

它应该可以工作,并且有200%的可靠性我已经测试过了。如果在docker-run或docker-compose中使用'-v/path/to/some/directory:/ var/www/...',那么它将无法正常工作。 –

回答

4

构建时只是评估(而不是当你创建新容器)。

如果你想使文件在容器中使用的主机使用data volume

docker run -v /host_dir:/container_dir ... 

如果你只是想从主机的文件复制到一个容器作为一次性操作即可使用:

docker cp /host_dir mycontainer:/container_dir 
+0

我想在编译时添加这些文件,这样我在文件夹中就有了初始文件。但是我想通过数据卷让我的主机可以使用这个文件夹。所以最初的文件应该放在数据卷中。我可以通过容器中的启动脚本复制文件,但我希望有一个更优雅的解决方案。如果没有,我会通过脚本来完成 –

1

问题出在您的ADD语句。你也可能不知道如何访问卷。比较下面的演示你的努力:

FROM alpine #, or your favorite tiny image 
ADD src/files /var/www/html/files 
VOLUME /var/www/html/files 

建立所谓的 'dataimg' 的图像:

docker build -t dataimg . 

使用dataimg图像创建一个名为 'DATACON' 数据容器:

docker run --name datacon dataimg /bin/cat 

在您的nginx容器中安装datacon的卷:

docker run --volumes-from datacon nginx ls -la /var/www/html/files 

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