You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

移动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配置管理原有数据,步骤如下:

  1. 停止原有容器:
    docker stop wcs-redis
    
  2. 删除原有容器实例(不会删除挂载的本地数据卷,数据会完整保留):
    docker rm wcs-redis
    
  3. 进入/redis/file目录执行:
    docker compose up -d
    
    此命令会用新的网络配置创建容器,自动复用本地./config和./data目录中的数据,相当于用新配置重建容器,原有数据完全保留。

方法三:修改原有容器网络并纳入新compose管理(不删除原有容器)

如果不想删除原有容器,直接调整网络并关联新配置:

  1. 创建新compose定义的网络:
    docker network create wcs-network2
    
  2. 将原有容器连接到新网络:
    docker network connect wcs-network2 wcs-redis
    
  3. (可选)断开原有容器与旧网络的连接:
    docker network disconnect wcs-network wcs-redis
    
  4. 进入/redis/file目录执行:
    docker compose up -d --no-recreate
    
    此命令会让Docker Compose识别到已有同名容器,不会重新创建,而是将其纳入自身管理体系,同时应用新配置中的其他设置。

内容的提问来源于stack exchange,提问作者Dahen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 17:15:11