docker 如何在合成文件位置改变时生成相同的合成

dzjeubhm  于 2022-12-29  发布在  Docker
关注(0)|答案(2)|浏览(175)

首先我在/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的位置和它的内容时,如何保持相同的容器。

f0brbegy

f0brbegy1#

首先停止所有先前的容器并移除它们。然后运行新的容器。
这个错误是因为有一个容器与名称/wcs-redis .你可以看到它与docker ps -a .

whlutmcx

whlutmcx2#

Compose有一个项目名称的概念,它有两个作用:它被记录在容器元数据中,用于构造各种对象的Docker本地名称。
默认项目名称是根据当前目录的基本名称构造的。当合成文件位于/redis中时,项目名称默认为redis。但是现在它在/redis/file中,默认项目名称是file。这意味着您实际上有两个不同的合成项目。由于您将container_name:重写为固定字符串,而不是让Compose选择其名称,因此这里会出现冲突。
您可以通过覆盖项目名称来删除旧设置

docker-compose -p redis down -v
docker-compose up -d

(这样做的一个必然结果是,你不需要在Compose文件本身的名称中包含项目特定的前缀。你也可以让Compose构造它的default网络,每个项目都是唯一的,选择container_name:,并为你需要build:的东西选择一个image:名称。这会导致Compose文件比你经常在SO问题中看到的要短得多。)

相关问题