Home > Back-end >  How to up a same compose when the comopse file location changed
How to up a same compose when the comopse file location changed

Time:12-29

First I run docker compose up -d command under /redis folder.And a container with ID 9c2223c1cde2 was created. the compose.yml as fellow:

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

When I was trying to refactoring my project, I moved this compose file to /redis/file folder. And changed container network in compose.yml as 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

And I get an ERROR:
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.

I really want to know how to keep the same container when I change the compose.yml location and it's content.

CodePudding user response:

first stop all previous containers and remove them. then run new container.

this error is because there is a container with name /wcs-redis. you can see it with docker ps -a.

CodePudding user response:

Compose has the notion of a project name which has a couple of effects. It is recorded in container metadata and used to construct the Docker-native names of various objects.

The default project name is constructed from the base name of the current directory. When the Compose file was in /redis the project name defaulted to redis, but now that it is in /redis/file the default project name is file. This means you effectively have two different Compose projects. Since you override container_name: to a fixed string rather than let Compose choose its name, you get a conflict here.

You can delete the old setup by overriding the project name

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

(A corollary to this is that you don't need to include a project-specific prefix in the names in the Compose file itself. You can also let Compose construct its default network, which will be unique per project, choose the container_name:, and choose an image: name for things you build:. This can result in much shorter Compose files than you often see in SO questions.)

  • Related