You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker中利用additional-contexts实现两个独立服务共享本地Python模块的配置问题

Docker中利用additional-contexts实现两个独立服务共享本地Python模块的配置问题

看起来你已经找对方向了,用additional-contexts确实是Docker Compose里实现跨服务共享本地代码的靠谱方案,我来帮你把剩下的配置补全,确保model-server和web-server都能顺利导入shared/models.py模块。

首先,我们先把docker-compose.yml的配置补全,给两个服务都配置好额外上下文:

name: my_docker
services:
  model-server:
    build:
      context: ./model_server/app
      additional_contexts:
        # 给shared目录起个别名,后面Dockerfile里要用到这个名字
        shared-ctx: ./shared
      dockerfile: Dockerfile
      args:
        INSTALL_DEV: "true"
    command:
      - python
      - run_model_server.py
    # 你的环境变量配置可以保留在这里
    environment:
      # ... 你的原有配置内容

  web-server:
    build:
      context: ./web_server/app
      additional_contexts:
        # 统一别名方便维护
        shared-ctx: ./shared
      dockerfile: Dockerfile
      args:
        INSTALL_DEV: "true"
    command:
      - python
      - main.py
    environment:
      # ... 你的原有配置内容

接下来是关键步骤:修改两个服务的Dockerfile,把额外上下文里的shared目录内容复制到镜像中,并且让Python能正确找到这个模块。

以model_server/app/Dockerfile为例,添加以下配置:

# 保留你原有的依赖安装步骤
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt

# 从额外上下文(别名shared-ctx)复制shared目录的所有内容到镜像的/app/shared路径下
# --from=shared-ctx 是指定从我们定义的额外上下文里读取内容
COPY --from=shared-ctx ./ /app/shared/

# 把当前工作目录加入Python的搜索路径,这样直接import models就能找到模块
ENV PYTHONPATH=/app

# 复制你自己的应用代码到容器内
COPY ./app/ .

# 保留你原有的启动命令配置

web_server/app/Dockerfile的修改逻辑完全一致,同样添加上述的COPY --from=shared-ctx和ENV PYTHONPATH配置即可。

最后给你几个小提醒:

  • additional-contexts里的路径是相对于docker-compose.yml所在目录的,你的项目结构里这个路径是正确的,不用调整
  • 测试的时候可以进入任意一个服务的容器,执行python -c "import models; print(models.__file__)",如果能打印出模块的容器内路径,就说明配置成功了
  • 如果后续shared目录里新增子模块或依赖,这个配置也能自动覆盖,不用额外修改

备注:内容来源于stack exchange,提问作者oweydd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 14:30:28