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.)