2017-04-13 447 views
0

我有一个Dockerfile,用于生成vendor/文件夹的图像,其格式为/home/ics199/vendor/。我想将此文件夹复制到/var/www/html。问题是我也使用/var/www/html作为与主机一起安装的卷。如果我将vendor/文件夹复制到/var/www/html,则卷在装入并且无法使用时会被隐藏。所以,它需要在mount之后被复制。我希望它在容器中被复制以保留文件权限(不是容器 - >主机 - >容器),尽管我明白作为副作用,它会出现在主机的安装卷中。什么是最好的方式(最好是自动)?将文件夹复制到Docker容器内的已安装卷中

+0

你需要做的容器运行时拷贝(即通过'CMD'或'ENTRYPOINT'),我相信。 –

+0

你希望你的容器内的文件夹结构是'/ var/www/html/vendor'吗?如果是这样的话,你可以在你的'docker run'命令中使用'-v'两次,你首先执行'-v/foo/bar:/ var/www/html',然后是'-v/home/ics199/vendor:在/ var/www/html等/ vendor'。 – Jacob

+0

我不认为这会工作,因为'/ home/ics199/vendor'不在主机上,它在容器中。现在,我正在手动执行'docker exec -it bash',然后执行'cp -R/home/ics199/vendor// var/www/html'。 – notmyidea

回答

0

我会做到这一点的入口点奥利弗建议,但不是一个副本,您可以使用您的容器内的符号链接到一个文件夹:

样品entrypoint.sh:

#!/bin/sh 

ln -sf /home/ics199/vendor /var/www/html/vendor 
if [ $# == 0 ]; then 
    set -- /bin/sh 
fi 
exec "[email protected]" 

而且Dockerfile将包括:

COPY entrypoint.sh /entrypoint.sh 
ENTRYPOINT /entrypoint.sh 
+0

如果基本映像已经有一个入口点,会造成问题吗?根据[Dockerfile参考](https://docs.docker.com/engine/reference/builder/#entrypoint),只有最后一个被执行。 – notmyidea

+0

您需要使用ln命令更新现有端点,或者在您的端点调用其端点。 – BMitch

相关问题