使用Docker Compose在Docker图像之间共享文件夹和Python文件

使用Docker Compose在Docker图像之间共享文件夹和Python文件,docker,docker-compose,dockerfile,Docker,Docker Compose,Dockerfile,我希望我密切相关的项目server_1和server_2的不同Docker项目位于一个文件夹中,我可以使用Docker Compose同时构建/部署 示例项目目录: . ├── common_files │   ├── grpc_pb2_grpc.py │   ├── grpc_pb2.py │   └── grpc.proto ├── docker-compose.yml ├── flaskui │   ├── Dockerfile │   └── flaskui.py ├── server_

我希望我密切相关的项目
server_1
server_2
的不同Docker项目位于一个文件夹中,我可以使用Docker Compose同时构建/部署

示例项目目录:

.
├── common_files
│   ├── grpc_pb2_grpc.py
│   ├── grpc_pb2.py
│   └── grpc.proto
├── docker-compose.yml
├── flaskui
│   ├── Dockerfile
│   └── flaskui.py
├── server_1
│   ├── Dockerfile
│   └── server_1.py
├── server_2
│   ├── Dockerfile
│   └── server_2.py
└── server_base.py
我希望两个问题有一个共同的解决方案:

  • 我怎样才能使它只在一个地方有公共依赖项
    公共文件/
  • 如何在两个服务器项目中使用通用代码
    server\u base.py
  • 我曾尝试在我的项目Python脚本中使用相对目录进行导入,如从..common_files import grpc_pb2,但我得到了ValueError:尝试在顶级包之外进行相对导入


    我考虑过在docker compose.yml中使用
    只读
    卷挂载,但这并不能解释如何从项目文件(如
    flaskui/Dockerfile
    )中引用
    common_文件
    ,您需要将包含grpc文件和
    server_base.py
    的本地目录作为卷装入
    server_1
    server_2
    容器中。这样,只有一个真实来源(您的本地目录),您可以从两个容器中使用它们

    您可以在容器的
    docker compose.yml
    文件中添加
    volumes
    定义。下面是我为您的用例创建的基本组成文件:

    version: "3"
    
    services:
      server_1:
        image: tutum/hello-world
        ports:
          - "8080:8080"
        container_name: server_1
        volumes:
          - ./common_files:/common_files
    
      server_2:
        image: tutum/hello-world
        ports:
          - "8081:8081"
        container_name: server_2
        volumes:
          - ./common_files:/common_files
    
    common_files
    是本地目录中的文件夹,其中包含
    server_base.py
    以及要作为卷装载到需要使用它们的容器中的grpc文件。这些称为主机卷,因为您正在从主机装载本地文件作为容器的卷

    使用此设置,当您
    exec
    进入
    server\u 1
    时,您可以看到
    /
    目录中有一个
    通用\u文件
    文件夹。与服务器2类似

    您可以使用
    docker compose exec server\u 1/bin/sh

    您还可以阅读有关Docker卷的更多信息。

    您使用容器中的目录引用这些文件(按卷装入)。