与Docker在容器之间共享文件

时间:2018-11-22 01:54:24

标签: docker docker-compose

我有一个类似以下的项目结构

app/
   docker-compose.yml
   module1/
       Dockerfile
       module1.py
   module2/
       Dockerfile
       module2.py
   common/
       common_things.py

在我的module1的Dockerfile中,

COPY module1.py /app
COPY ../common /app/common

但是Docker不喜欢这第二行。错误低于

ERROR: Service 'module1' failed to build: COPY failed: Forbidden path outside the build context: ../common ()

如何通过Dockerfile或Docker-compose告诉Docker,module1可以从../common获取文件?我可以使用符号链接进行公共链接,以便module1和module2在各自的目录中具有公共链接,但这感觉像是过分杀伤……

额外的荣誉:跨Docker容器共享文件的最佳实践是什么?也许还有另一种我不知道的方法。

1 个答案:

答案 0 :(得分:0)

您可以通过将整个应用程序目录作为构建上下文来传递。

docker-compose.yml看起来像这样:

version: '3'
services:
  module1:
    build:
      context: ./
      dockerfile: module1/Dockerfile
...

第一个Dockerfile应该是这样的:

...
COPY module1/module1.py /app
COPY common /app/common
...

一些其他评论:

通常,您会将两个Docker映像的公共部分发布为共享库。我对python不太熟悉,但是我认为它可以归结为:

  • common_things.py作为python程序包发布到某些python存储库中,以便可以通过pip install进行安装
  • 在每个Docker映像中添加一个requirements.txt文件,并在其中引用您的python包
  • 在Docker构建过程中运行pip install -r requirements.txt,将common_things-package安装在docker-image中。

但是,这对于您的用例来说可能是过大的,所以我认为您的文件共享解决方案可能是您的不错选择。