Docker编写命令因冲突而失败

k4ymrczo  于 2023-03-01  发布在  Docker
关注(0)|答案(7)|浏览(172)

我使用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

此调用的预期行为是:

  • 如果容器不存在,则创建该容器
  • 启动容器如果它存在
  • 如果容器已启动,则只需冷却,不执行任何操作
zlwx9yxi

zlwx9yxi1#

Docker Compose通常会根据当前的项目名和services:块的名称来分配容器名。但是,这意味着您不能使用不同的项目名称(从不同的目录)启动同一合成文件的多个副本,因为不会使用您显式选择的容器名称。
你几乎从不关心容器的名字是什么,只有当你试图使用普通的docker命令来操作Compose-managed容器时,它才真正重要;对业务间通信没有影响,删除container_name:行即可。
(For类似的原因,如果hostname:links:部分对整个系统没有实际影响,则几乎总是可以删除它们。)

mkh04yzy

mkh04yzy2#

在我的例子中,我把项目移到了另一个目录中。当我试图运行docker-compose up时,由于一些冲突而失败了。
我用命令docker system prune解决了这些问题。

kpbpu008

kpbpu0083#

这是由于你上次运行docker-compose up时所在的目录不同。一种选择是改回原来的目录。或者如果你已经将其配置为systemd服务,你可以使用systemctl

ou6hu8tu

ou6hu8tu4#

嗯......错误消息对我来说似乎很简单......

The container name "/my-postgres" is already in use by container

如果您只想从离开的地方重新启动,应该使用docker-compose start
否则,只需在运行它之前清理您的工作区:

docker-compose down
docker-compose up -d
omvjsjqw

omvjsjqw5#

从docker-compose命令中删除**--no-recreate**标志。然后再次执行该命令。
1百万美元1倍

*--no-recreate用于防止附加更新。

如果存在服务的现有容器,并且在创建容器后更改了服务的配置或映像,则停靠-合成拾取将通过停止并重新创建容器来拾取更改。要防止合成拾取更改,请使用**--no-recreate**标记。
官方 Docker 文件Link

uqjltbpv

uqjltbpv6#

基本上,可以归结为以下几点:(根据您的用例使用它们)
要清除容器:

docker rm -f $(docker ps -a -q)

要清除图像:

docker rmi -f $(docker images -a -q)

要清除卷:

docker volume rm $(docker volume ls -q)

要清除网络:

docker network rm $(docker network ls | tail -n+2 | awk '{if($2 !~ /bridge|none|host/){ print $1 }}')
wj8zmpe1

wj8zmpe17#

我也有类似的问题

dcdown --remove-orphans

这对我很有效。

相关问题