如何从多个Dockerfile中的共享目录复制文件?
在我的应用程序中,我有5个docker容器,每个容器从Dockerfile生成的图像开始。结构如下:如何从多个Dockerfile中的共享目录复制文件?,docker,dockerfile,docker-compose,Docker,Dockerfile,Docker Compose,在我的应用程序中,我有5个docker容器,每个容器从Dockerfile生成的图像开始。结构如下: -projectdir -docker -application1 -Dockerfile -script.sh -application2 -Dockerfile -script.sh -application3 -Dockerfile -application4 -Dockerfile
-projectdir
-docker
-application1
-Dockerfile
-script.sh
-application2
-Dockerfile
-script.sh
-application3
-Dockerfile
-application4
-Dockerfile
-script.sh
-application5
-Dockerfile
script.sh复制到应用程序1、2和4的Dockerfile中。问题是我必须在每个应用程序目录中放置相同的script.sh。有没有办法使用包含单个script.sh的共享文件夹并从中复制?我正在使用docker compose构建和运行容器。您可以定义一个专用的容器,将脚本保存在(作为)中
/path/to/scripts
文件夹将在每个应用程序中共享。scripts
Dockerfile应该创建/path/to/scripts
并复制其中的script.sh
。自Docker 1.5以来,您可以在构建上下文中为Dockerfile指定路径。因此,以下工作:
-projectdir
-docker
-script.sh
-application1
-Dockerfile
-application2
-Dockerfile
...
您可以使用以下工具进行构建:
$ cd docker
$ docker build -f application1/Dockerfile .
不幸的是,我认为您还不能用Compose完成这项工作,因此您可能需要使用单独的脚本来构建和标记图像,然后才能在Compose中使用这些图像。谢谢您的回答。我使用数据卷容器来存储postgresql数据。在我看来,使用另一个数据容器来存储脚本似乎工作过度。你认为这是最好的方法吗@adrian mouat建议了另一种解决方案。@frodooooo39是的,或者如果需要,可以将脚本存储在第一个数据卷容器中。但它(数据卷容器)有助于识别共享的内容。而且它是可移植的(不像常规装载那样绑定到主机)@FrodoooO39仅供参考:在容器中存储共享数据不需要开销,因为数据卷容器不需要运行,它只需要存在。@Dmytro true。您只需
docker创建一个数据卷容器(如中所示)。您不必运行它。@shriek我已经编辑了答案,以反映中现在描述的语法,您不能通过指定dockerfile:application1/dockerfile
使用docker compose来完成吗?
$ cd docker
$ docker build -f application1/Dockerfile .