Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从多个Dockerfile中的共享目录复制文件?_Docker_Dockerfile_Docker Compose - Fatal编程技术网

如何从多个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

在我的应用程序中,我有5个docker容器,每个容器从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 .