Docker Compose中volumes_from按容器名引用报错如何正确配置?
Docker Compose volumes_from 引用报错的解决方法
出现报错 ERROR: Service "bar" mounts volumes from "oof", which is not the name of a service or container. 的核心原因是:使用container:oof写法时,bar服务启动优先级高于foo服务,foo对应的oof容器还未创建,Compose无法识别到该容器;同时同个docker-compose.yml栈内的服务卷引用,不需要加container:前缀。
解决方法
方法一:直接引用同栈服务名(推荐)
Compose内置支持直接通过服务名引用同配置文件内其他服务的卷,不需要指定容器名前缀,同时会自动处理服务启动依赖,保证foo服务先启动。
修改docker-compose.yml中bar服务的volumes_from配置即可:
version: 2.4 services: foo: image: ubuntu:focal container_name: oof volumes: - ./foo:/foo bar: image: ubuntu:focal container_name: rab volumes_from: # 直接写服务名foo,无需加container:前缀 - foo
修改后直接执行docker-compose up -d即可正常启动。
方法二:预启动被引用的容器(不推荐)
如果你确实需要通过容器名显式引用,可以先单独启动foo服务保证oof容器已创建,再启动全部服务:
- 先单独启动foo服务:
docker-compose up -d foo - 待foo服务运行正常后,启动所有服务:
docker-compose up -d
补充说明
只有当你需要引用不在当前docker-compose.yml管理范围内、且已经处于运行状态的外部容器的卷时,才需要使用container:<容器名>的写法,使用前需确认目标容器已经正常运行。
内容的提问来源于stack exchange,提问作者clorz
相关产品推荐
相关产品推荐

