我正在使用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
此调用的预期行为是:
答案 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
我解决了它们。