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

使用docker-compose与共享卷实现容器间数据共享的报错问题求助

问题根因
  • 镜像不存在报错:本地删除过旧镜像,但docker-compose仍保留了之前运行时的容器元数据,关联的旧镜像哈希不存在,导致重建失败
  • render服务启动报错:docker-compose的command字段默认不会解析环境变量赋值语法,直接将FLASK_APP=app.py识别为待执行的可执行文件,系统找不到该文件所以报错
  • 额外逻辑问题:当前core服务生成的png路径是./core/data/ok.png,属于容器内core服务的工作目录路径,没有写入挂载的/data共享目录,render服务无法读取到目标文件
完整修正方案

1. 清理旧docker-compose残留资源

先执行命令清理旧容器、缓存,避免镜像关联错误:

docker-compose down -v --remove-orphans

2. 修正docker-compose.yaml配置

修正后的完整配置如下:

version: '3'

services:
  core:
    build: ./core
    command: python app.py
    volumes:
      # 可按需替换为宿主机的其他共享路径,这里用项目下的./data避免根目录权限问题
      - "./data:/data:rw"

  render:
    build: ./render
    ports:
      - "8080:5000"
    # 环境变量统一放到environment字段,不要写在command内
    environment:
      - FLASK_APP=app.py
    command: flask run --host=0.0.0.0
    depends_on:
      - core
    volumes:
      - "./data:/data:ro"
    # 可选配置:如果core生成文件需要时间,添加重启策略避免render首次启动找不到文件
    restart: on-failure

3. 修正core/app.py的文件存储逻辑

把原来生成到./core/data/ok.png的逻辑,修改为生成后移动到共享卷挂载的容器内路径/data/ok.png,示例代码片段:

# 原有生成png的逻辑保持不变
# 生成完成后移动到共享目录
import shutil
import os
os.makedirs('/data', exist_ok=True)
shutil.move('./core/data/ok.png', '/data/ok.png')

同时确认render/requirements.txt中已经添加flask依赖。

4. 启动服务

执行以下命令重新构建镜像并启动:

docker-compose up --build

内容的提问来源于stack exchange,提问作者Lawhatre

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 20:06:04