Docker Compose命令因冲突而失败

时间:2019-08-05 14:51:46

标签: docker docker-compose

我正在使用docker-compose建立我的项目依赖关系。到目前为止,这一直有效

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

此调用的预期行为是:

  • 制造不存在的容器
  • 启动容器(如果存在)
  • 冷静一点,如果容器已经启动,什么也不做

4 个答案:

答案 0 :(得分:3)

Docker Compose通常根据其当前项目名称和services:块的名称来分配容器名称。指定container_name:会显式覆盖此设置;但是,这意味着您将无法使用不同的项目名称(来自不同的目录)启动同一Compose文件的多个副本,因为不会使用您明确选择的容器名称。

您几乎不需要关心容器名称是什么。仅当您尝试使用简单的docker命令来操作由Compose管理的容器时,它才真正重要。它对服务间通信没有影响。只需删除container_name:行即可。

(出于类似的原因,如果您拥有hostname:links:部分,而对整个系统没有实际影响,几乎可以删除它们。)

答案 1 :(得分:0)

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

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

如果只想从您离开的地方重新开始,则应使用docker-compose start
否则,只需在运行工作空间之前对其进行清理:

docker-compose down
docker-composo up -d

答案 2 :(得分:0)

从docker-compose命令中删除-不重新创建标志。然后再次执行命令。

$ docker-compose up -d

  • -禁止重新创建用于防止意外更新。

如果已有用于服务的容器,并且在创建容器后更改了服务的配置或映像,则docker-compose up会通过停止并重新创建容器来获取更改。为防止Compose获取更改,请使用-no-recreate 标志。

Docker官方文档。Link

答案 3 :(得分:0)

就我而言,我将项目移到了另一个目录中。 当我尝试运行 docker-compose up 时,由于某些冲突而失败。

使用命令 docker system prune 我解决了它们。