Home > Blockchain >  Docker compose stops multiple services
Docker compose stops multiple services

Time:09-22

I hope I didn't miss anything simple from the manual.
The structure is:

/home/user
   /foo1/bar1/docker/
                   Dockerfile
                   docker-compose.yml
   /foo2/bar2/docker/
                   Dockerfile
                   docker-compose.yml

docker-compose.yml

version: '3.9'
services:
  foo1-bar1:
    build:
      context: .
      args:
        DOCKER_SERVER_ROOT_DIR: ${DOCKER_SERVER_ROOT_DIR}
      dockerfile: Dockerfile
    image: foo1-bar1:v1
    container_name: foo1-bar1-v1

The same is for foo-bar-v2. Both of them I successfully run as:

cd /foo1/bar1/docker/
docker-compose up -d
[ ] Running 1/1
⠿ Container foo1-bar1-v1  Started 

cd /foo2/bar2/docker/
docker-compose up -d
[ ] Running 1/1
⠿ Container foo2-bar2-v1  Started

The question is, why does it stop both of them when I try to stop only 1? Service names, container names, image names are different...

user@vm:~/foo1/bar1/docker$ docker-compose stop
[ ] Running 2/2
 ⠿ Container foo1-bar1-v1    Stopped                                                                                                                                                                                         
 ⠿ Container foo2-bar2-v2    Stopped

CodePudding user response:

docker-compose has the concept of projects. Run docker-compose --help and you will see:

      --project-directory string   Specify an alternate working directory
                                   (default: the path of the, first specified, Compose file)
  -p, --project-name string        Project name

So in your case, both your services belong to the same project named docker.

You can actually run docker-compose -p docker ps and you will see both your services.

You can also override this by specifying your own project name independent of the directory name.

My version of docker-compose (Docker Compose version v2.10.2 MacOS) does warn me that there are orphan containers in this project when I replicate your setup. Also it doesn't automatically stop "orphan" services and gives a warning that the network could not be removed either.

This is also another interesting fact: both services run on the same network (docker_default) only because the project name (folder name) is the same.

I hope this explains it.

CodePudding user response:

You have to specify the service to stop. Otherwise it will stop all services.

docker compose stop [OPTIONS] [SERVICE...]

here : docker-compose stop foo1-bar1

  • Related