如何从多个 Dockerfile 中的共享目录复制文件?

How to copy files from shared directory in multiple 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 来构建和 运行 容器。

您可以定义一个专门用于将脚本保存在 volume (as a data volume container)

中的容器
scripts:
  volumes:
    - /path/to/scripts
application1:
  volumes_from:
    - scripts
application2:
  volumes_from:
    - scripts

/path/to/scripts 文件夹将在每个应用程序中共享。
scripts Dockerfile 应该创建 /path/to/scripts 并在其中复制 script.sh

从 Docker 1.5 开始,您可以在构建上下文中为 Docker 文件指定一个路径。所以以下工作:

-projectdir
  -docker
    -script.sh
    -application1
      -Dockerfile  
    -application2
      -Dockerfile
    ...

您可以使用:

$ cd docker
$ docker build -f application1/Dockerfile .

遗憾的是,我认为您还不能使用 Compose 执行此操作,因此您可能必须使用单独的脚本来构建和标记图像,然后才能在 Compose 中使用这些图像。