使用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
相关产品推荐
相关产品推荐

