我使用docker-composite调出了我的项目依赖关系。到目前为止,这个方法还能用
docker-compose up -d --no-recreate;
然而,今天我尝试运行该项目后,再次几个星期,我迎接了错误消息
Creating my-postgres ... error
ERROR: for my-postgres Cannot create container for service postgres: b'Conflict. The container name "/my-postgres" is already in use by container "dbd06bb1d99eda6f075ea688df16e8b355e559e1759f084dee8f3cddfc535b0b". You have to remove (or rename) that container to be able to reuse that name.'
ERROR: for postgres Cannot create container for service postgres: b'Conflict. The container name "/my-postgres" is already in use by container "dbd06bb1d99eda6f075ea688df16e8b355e559e1759f084dee8f3cddfc535b0b". You have to remove (or rename) that container to be able to reuse that name.'
ERROR: Encountered errors while bringing up the project.
我的docker-compose.yml文件是
postgres:
container_name: my-postgres
image: postgres:latest
ports:
- "15432:5432"
Docker版本为
Docker version 19.03.1, build 74b1e89
Docker合成版本为
docker-compose version 1.24.1, build 4667896b
此调用的预期行为是:
- 如果容器不存在,则创建该容器
- 启动容器如果它存在
- 如果容器已启动,则只需冷却,不执行任何操作
7条答案
按热度按时间zlwx9yxi1#
Docker Compose通常会根据当前的项目名和
services:
块的名称来分配容器名。但是,这意味着您不能使用不同的项目名称(从不同的目录)启动同一合成文件的多个副本,因为不会使用您显式选择的容器名称。你几乎从不关心容器的名字是什么,只有当你试图使用普通的
docker
命令来操作Compose-managed容器时,它才真正重要;对业务间通信没有影响,删除container_name:
行即可。(For类似的原因,如果
hostname:
和links:
部分对整个系统没有实际影响,则几乎总是可以删除它们。)mkh04yzy2#
在我的例子中,我把项目移到了另一个目录中。当我试图运行
docker-compose up
时,由于一些冲突而失败了。我用命令
docker system prune
解决了这些问题。kpbpu0083#
这是由于你上次运行
docker-compose up
时所在的目录不同。一种选择是改回原来的目录。或者如果你已经将其配置为systemd
服务,你可以使用systemctl
。ou6hu8tu4#
嗯......错误消息对我来说似乎很简单......
如果您只想从离开的地方重新启动,应该使用
docker-compose start
。否则,只需在运行它之前清理您的工作区:
omvjsjqw5#
从docker-compose命令中删除**--no-recreate**标志。然后再次执行该命令。
1百万美元1倍
*--no-recreate用于防止附加更新。
如果存在服务的现有容器,并且在创建容器后更改了服务的配置或映像,则停靠-合成拾取将通过停止并重新创建容器来拾取更改。要防止合成拾取更改,请使用**--no-recreate**标记。
官方 Docker 文件Link
uqjltbpv6#
基本上,可以归结为以下几点:(根据您的用例使用它们)
要清除容器:
要清除图像:
要清除卷:
要清除网络:
wj8zmpe17#
我也有类似的问题
这对我很有效。