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

Docker共享卷给两个容器启动报错问题咨询

问题原因

核心问题是将同一个Docker卷挂载到了两个容器的/app目录,覆盖了镜像中原有的目录内容:

  • 第一次运行其中一个容器时,my_volume是空的,Docker会自动把容器镜像里/app目录下的内容(比如容器1的container1文件夹)复制到卷中。
  • 运行第二个容器时,已有内容的卷会直接替换容器内的/app目录,导致镜像里原本存在的container2文件夹被卷内容覆盖,容器找不到对应的Python脚本。

解决方法

方法1:将卷挂载到子目录,避免覆盖核心代码目录

修改容器运行命令,把卷挂载到/app下的子目录(比如/app/data),保留镜像里的container1/container2目录:

# 运行容器1
docker container run -it --network my_network --name test1_container\
 --mount type=volume,src=my_volume,dst=/app/data -e LOG=1\
 --rm test1:latest

# 运行容器2
docker container run -it --network my_network --name test2_container\
 --mount type=volume,src=my_volume,dst=/app/data -e LOG=1\
 --rm test2:latest

同时修改Python脚本的文件路径,指向挂载的子目录:

with open('data/record.log', 'a') as file:
    file.write("file11111")

方法2:为两个容器使用独立的卷

如果不需要共享数据,给每个容器分配单独的卷,避免互相干扰:

# 运行容器1,使用my_volume1
docker container run -it --network my_network --name test1_container\
 --mount type=volume,src=my_volume1,dst=/app -e LOG=1\
 --rm test1:latest

# 运行容器2,使用my_volume2
docker container run -it --network my_network --name test2_container\
 --mount type=volume,src=my_volume2,dst=/app -e LOG=1\
 --rm test2:latest

方法3:仅挂载共享数据目录

如果需要共享日志等数据,只挂载需要共享的目录,而非整个/app。比如在Dockerfile中指定日志目录:

# 容器1的Dockerfile新增日志目录
RUN mkdir /app/logs
WORKDIR /app/
CMD python3 container1/test1.py

修改脚本写入logs/record.log,运行时挂载卷到/app/logs:

docker container run -it --network my_network --name test1_container\
 --mount type=volume,src=my_logs_volume,dst=/app/logs -e LOG=1\
 --rm test1:latest

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 18:25:29