首先我在/redis
文件夹下运行docker compose up -d
命令。然后创建了一个包含ID 9c2223c1cde2
的容器。compose.yml
作为伙伴:
version: "3.7"
networks:
wcs-network:
services:
wcs-redis:
container_name: wcs-redis
image: redis:7.0.7
restart: always
ports:
- 6379:6379
volumes:
- ./config/redis.conf:/usr/local/etc/redis/redis.conf
- ./data:/data
networks:
- wcs-network
privileged: true
command: redis-server /usr/local/etc/redis/redis.conf
当我试图重构我的项目时,我把这个组合文件移到了/redis/file
文件夹中,并把compose.yml
中的容器网络改为fellow:
version: "3.7"
networks:
wcs-network2:
services:
wcs-redis:
container_name: wcs-redis
image: redis:7.0.7
restart: always
ports:
- 6379:6379
volumes:
- ./config/redis.conf:/usr/local/etc/redis/redis.conf
- ./data:/data
networks:
- wcs-network2
privileged: true
command: redis-server /usr/local/etc/redis/redis.conf
我得到一个错误:Error response from daemon: Conflict. The container name "/wcs-redis" is already in use by container "9c2223c1cde2316a19f0db6b40c4eea66fc4d252676c74ed8a847572e58014e7". You have to remove (or rename) that container to be able to reuse that name.
我真的很想知道当我改变compose.yml
的位置和它的内容时,如何保持相同的容器。
2条答案
按热度按时间f0brbegy1#
首先停止所有先前的容器并移除它们。然后运行新的容器。
这个错误是因为有一个容器与名称
/wcs-redis
.你可以看到它与docker ps -a
.whlutmcx2#
Compose有一个项目名称的概念,它有两个作用:它被记录在容器元数据中,用于构造各种对象的Docker本地名称。
默认项目名称是根据当前目录的基本名称构造的。当合成文件位于
/redis
中时,项目名称默认为redis
。但是现在它在/redis/file
中,默认项目名称是file
。这意味着您实际上有两个不同的合成项目。由于您将container_name:
重写为固定字符串,而不是让Compose选择其名称,因此这里会出现冲突。您可以通过覆盖项目名称来删除旧设置
(这样做的一个必然结果是,你不需要在Compose文件本身的名称中包含项目特定的前缀。你也可以让Compose构造它的
default
网络,每个项目都是唯一的,选择container_name:
,并为你需要build:
的东西选择一个image:
名称。这会导致Compose文件比你经常在SO问题中看到的要短得多。)