docker compose orphan containers warning

DockerDocker ComposeContainersProject

Docker Problem Overview


How to be with orphan images when you have 2 independent projects and you want them to work at the same time or at least to build running docker-compose up -d without --remove-orphans flag when images are already built for another project.

docker compose file1:

version: '2'
services:
  applications:
    image: tianon/true
    volumes:
      - ../../:/var/www/vhosts/project1
  nginx:
    build: ./images/nginx
    image: project1/nginx:latest
    ports:
      - "80:80"
    volumes_from:
      -  applications
    networks:
      appnet:
        aliases:
          - project1.app
          - admin.project1.app
  php:
    image: project1/php:latest
    ports:
      - "7778:7778"
    build: 
      context: ./images/php
      dockerfile: Dockerfile
    volumes_from:
      -  applications
    networks:
      -  appnet
  mysql:
    image: project1/mysql:latest
    build: ./images/mysql
    environment:
      MYSQL_ROOT_PASSWORD: secret
    volumes:
      -  mysqldata:/var/lib/mysql
    networks:
      -  appnet
    ports:
      - "33066:3306"
 workspace:
    image: project1/workspace:latest
    build:
      context: ./images/workspace
    volumes_from:
      - applications
    working_dir: /var/www/vhosts/project1
    networks:
      -  appnet
networks:
  appnet:
    driver: "bridge"
volumes:
   mysqldata:
    driver: "local"

the second docker compose file:

version: '2'
services:
  project2_applications:
    image: tianon/true
    volumes:
      - ../../:/var/www/vhosts/project2
  project2_nginx:
    build: ./images/nginx
    image: project2/nginx:latest
    ports:
      - "8080:80"
    volumes_from:
      -  project2_applications
    networks:
      project2_appnet:
        aliases:
          - project2.app
          - admin.project2.app
  project2_php:
    image: project2/php:latest
    ports:
      - "7777:7777"
    build: 
      context: ./images/php
      dockerfile: Dockerfile
    volumes_from:
      -  project2_applications
    networks:
      -  project2_appnet
  project2_mysql:
    image: project2/mysql:latest
    build: ./images/mysql
    environment:
      MYSQL_ROOT_PASSWORD: secret
    volumes:
      -  project2_mysqldata:/var/lib/mysql
    networks:
      -  project2_appnet
    ports:
      - "33067:3306"
  project2_workspace:
    image: project2/workspace:latest
    build:
      context: ./images/workspace
    volumes_from:
      - project2_applications
    working_dir: /var/www/vhosts/videosite
    networks:
      -  project2_appnet
networks:
  project2_appnet:
    driver: "bridge"
volumes:
   project2_mysqldata:
    driver: "local"

And now when I have already built project1 and trying to run docker-compose up -d for the second project I see warning:

> WARNING: Found orphan containers (docker_workspace_1, docker_nginx_1, docker_php_1, docker_mysql_1, docker_memcached_1) for this project. If you removed or renamed this service in your compose file, you can run this command with the --remove-orphans flag to clean it up.

I have a supposition that it's because container names for project1 should be more specific and I need to add some prefixes like I'm doing for project2, but project1 is in use by many other developers and I do not want to change it.

Is there any way to turn off orphan check?

And the second thing: is just a warning message but for some reason, after it appearing compose is failing with error:

> ERROR: Encountered errors while bringing up the project.

And to make it work I need to run docker-compose up -d --remove-orphans

Docker Solutions


Solution 1 - Docker

Compose uses the project name (which defaults to the basename of the project directory, but can be specified explicitly) internally to isolate projects from each other. The project name is used to create unique identifiers for all of the project's containers and other resources. For example, if your project name is myapp and it includes two services db and web, then Compose starts containers named myapp_db_1 and myapp_web_1 respectively.

You get the "Found orphan containers" warning because docker-compose detects some containers which belong to another project with the same name.

To prevent different projects from interfering with each other (and suppress the warning) you can set a custom project name by using the -p command line option or the COMPOSE_PROJECT_NAME environment variable. The environment variable can also be set via an environment file (.env in the current working directory by default).

Solution 2 - Docker

docker-compose takes the name of the directory it is in as the default project name.

You can set a different project name by using -p or --project-name. https://docs.docker.com/compose/reference/#use--p-to-specify-a-project-name

I had a similar problem because my projects all had the docker/docker-compose.yml structure.

Solution 3 - Docker

To build on other answers, I create a .env file with my docker compose projects. I have a number of projects that all use the docker directory but are different projects.

To use docker-compose -p is a bit error prone, so creating .env file in the same directory as the docker-compose.yml:

-rw-rw-r--  1 auser auser 1692 Aug 22 20:34 docker-compose.yml
-rw-rw-r--  1 auser auser   31 Aug 22 20:44 .env

alleviates the necessary overhead of remembering -p.

In the .env file, I can now set the COMPOSE_PROJECT_NAME variable:

COMPOSE_PROJECT_NAME=myproject

On running:

docker-compose up -d

the COMPOSE_PROJECT_NAME is substituted without the use of -p.

Reference: https://docs.docker.com/compose/env-file/

Solution 4 - Docker

If the orphaned containers are expected and not intended to remove, you can set COMPOSE_IGNORE_ORPHANS variable to true.

Consise but just right away working source is here.

One option is to put it as a line into .env file next to docker-compose.yml like this:

COMPOSE_IGNORE_ORPHANS=True

Another option is pass or set it as an environment variable.

sh:

COMPOSE_IGNORE_ORPHANS=True docker-compose up -d 

or

export COMPOSE_IGNORE_ORPHANS=True
docker-compose up -d 

cmd:

SET COMPOSE_IGNORE_ORPHANS=True&& docker-compose up -d

powershell:

$env:COMPOSE_IGNORE_ORPHANS = 'True'; & docker-compose up -d

Solution 5 - Docker

docker-compose up --remove-orphans

you can run this command to clean orphan containers. As specified in the warning

Solution 6 - Docker

This happens when your docker-compose file has got updated. I received similar error on Docker startup and found out that another team member updated the docker-compose.yml as part of cleanup. To fix this, I deleted the docker group using the Delete button in Docker Desktop and started it again. This fixed the error for me.enter image description here

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionBogdan DubykView Question on Stackoverflow
Solution 1 - DockerEugene YarmashView Answer on Stackoverflow
Solution 2 - DockerbobView Answer on Stackoverflow
Solution 3 - Dockeruser626201View Answer on Stackoverflow
Solution 4 - DockermoudrickView Answer on Stackoverflow
Solution 5 - DockerUserView Answer on Stackoverflow
Solution 6 - DockerGhanendraView Answer on Stackoverflow