Docker Compose v3数据卷容器运行异常问题求助
搞定Docker Compose v3里的数据卷访问问题
嘿,我看你这配置踩了个Docker的旧用法坑——在Compose v3及以后的版本里,专门搞个“数据卷容器”的操作早就没必要啦!Docker的命名卷本身就是独立于容器存在的持久化存储,根本不需要额外弄个容器来“托着”它。
为啥你的配置会出问题?
你写的assets容器执行/bin/true后会立刻退出,虽然加了depends_on让web等它启动,但这个依赖只管启动顺序,不管它会不会马上挂掉。而且核心问题是,你完全误解了命名卷的使用方式,绕了个没必要的弯。
简化版正确配置
如果你的需求就是让python:3容器能访问共享的命名卷,直接把多余的assets容器删掉就行:
version: '3' services: web: image: python:3 volumes: - assets_volume:/tmp # 可以加个测试命令看看卷里的内容 command: ls -l /tmp volumes: assets_volume:
如果需要初始化卷内容
要是你的cpgonzal/docker-data-volume镜像里的/tmp有要同步到卷里的文件,那可以整个初始化容器来干这个活,而不是让它当数据卷容器:
version: '3' services: init-assets: image: cpgonzal/docker-data-volume # 把镜像里的/tmp内容复制到卷里 command: cp -r /tmp/* /assets/ volumes: - assets_volume:/assets web: image: python:3 volumes: - assets_volume:/tmp depends_on: - init-assets command: ls -l /tmp volumes: assets_volume:
几个要记住的关键点
- 命名卷自己就能活:Docker命名卷是引擎管的,就算所有用它的容器都删了,卷里的数据还在,完全不需要容器撑着。
- depends_on不是万能的:它只保证启动顺序,不保证依赖容器把活干完。要是得等初始化完成,可能需要写个小脚本或者用健康检查工具来判断。
- 数据卷容器已经过时:这是Docker早期的玩法,现在官方都推荐直接用命名卷或者绑定挂载,别再搞中转容器啦。
查报错的小技巧
要是还启动失败,先看看assets容器的详细日志,就能知道具体哪错了:
docker-compose logs assets
内容的提问来源于stack exchange,提问作者toni
相关产品推荐
相关产品推荐

