移动Compose文件位置并改配置后,如何保留原有Docker容器?
问题与解决方案
问题背景
最初在/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
重构项目时,将该compose文件移至/redis/file目录,并修改了compose.yml中的容器网络,修改后的内容如下:
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文件位置并修改内容后,如何保留原有容器。
解决方案
方法一:修改新配置的容器名(保留两个独立容器)
直接在/redis/file/compose.yml中修改container_name字段为新名称,比如wcs-redis-v2:
services: wcs-redis: container_name: wcs-redis-v2 # 修改此处 # 其他配置保持不变
修改后进入/redis/file目录执行docker compose up -d,即可创建新容器,原有容器不受影响。
方法二:用新配置接管原有容器(保留数据,替换容器实例)
如果想让新的compose配置管理原有数据,步骤如下:
- 停止原有容器:
docker stop wcs-redis - 删除原有容器实例(不会删除挂载的本地数据卷,数据会完整保留):
docker rm wcs-redis - 进入
/redis/file目录执行:
此命令会用新的网络配置创建容器,自动复用本地docker compose up -d./config和./data目录中的数据,相当于用新配置重建容器,原有数据完全保留。
方法三:修改原有容器网络并纳入新compose管理(不删除原有容器)
如果不想删除原有容器,直接调整网络并关联新配置:
- 创建新compose定义的网络:
docker network create wcs-network2 - 将原有容器连接到新网络:
docker network connect wcs-network2 wcs-redis - (可选)断开原有容器与旧网络的连接:
docker network disconnect wcs-network wcs-redis - 进入
/redis/file目录执行:
此命令会让Docker Compose识别到已有同名容器,不会重新创建,而是将其纳入自身管理体系,同时应用新配置中的其他设置。docker compose up -d --no-recreate
内容的提问来源于stack exchange,提问作者Dahen
相关产品推荐
相关产品推荐

