Home > database >  Docker-compose expected container is up to date
Docker-compose expected container is up to date

Time:07-24

I created docker-compose yaml file to run a docker image after it has been pulled locally and this yaml file contain another services (mysql and phpmyadmin) so when I run a command docker-composer up -d I found a conflict in creating a container as it been used by another container with the same name and I expected to show me that the container is already run and up to date, I know that the container must be removed or renamed before creating a new one but I aiming to get the newer version of image and check if mysql and phpmyadmin services is up or not if up gives me those container is up to date and if not create it as another environment bellow.

docker-compose.yml

version: '3.3'

services:
  app-prod:
    image: prod:1.0
    container_name: app-prod
    ports:
      - "81:80"
    links:
      - db-prod
    depends_on:
      - db-prod
      - phpmyadmin-prod

  db-prod:
    image: mysql:8
    container_name: db-prod
    environment:
      - MYSQL_ROOT_PASSWORD=secret
      - MYSQL_DATABASE=laravel
      - MYSQL_USER=user
      - MYSQL_PASSWORD=secret
    volumes:
      - db-prod:/var/lib/mysql

  phpmyadmin-prod:
    image: phpmyadmin/phpmyadmin:5.0.1
    restart: always
    environment:
      PMA_HOST: db-prod
    container_name: phpmyadmin-prod
    ports:
      - "5001:80"

volumes:
  db-prod:

Error

Creating phpmyadmin-prod ... error
Creating db-prod         ... 

ERROR: for phpmyadmin-prod  Cannot create container for service phpmyadmin: Conflict. The container name "/phpmyadmin-prod" is already in use by container "5a52b27b64f7302bccb1c3a0eaeca8a33b3dfee5f1a279f6a809695Creating db-prod         ... error

ERROR: for db-prod  Cannot create container for service db: Conflict. The container name "/db-prod" is already in use by container "5d01c21efafa757008d1b4dbcc8d09b4341ac1457a0ca526ee57873cd028cf2b". You have to remove (or rename) that container to be able to reuse that name.

ERROR: for phpmyadmin  Cannot create container for service phpmyadmin: Conflict. The container name "/phpmyadmin-prod" is already in use by container "5a52b27b64f7302bccb1c3a0eaeca8a33b3dfee5f1a279f6a809695f482500a9". You have to remove (or rename) that container to be able to reuse that name.

ERROR: for db  Cannot create container for service db: Conflict. The container name "/db-prod" is already in use by container "5d01c21efafa757008d1b4dbcc8d09b4341ac1457a0ca526ee57873cd028cf2b". You have to remove (or rename) that container to be able to reuse that name.
ERROR: Encountered errors while bringing up the project.
Error: No such container: app-prod
Error: No such container: app-prod

While using another docker-compose file for test environment I got this which I expected

db-stage is up-to-date
phpmyadmin-stage is up-to-date
Creating app-stage ... done

CodePudding user response:

docker-compose run command will create new containers. But in your case, 2 of them are already running, hence, you can use

docker-compose up -d

CodePudding user response:

That specific error is easy to fix. You're trying to manually specify container_name: for every container, but the error message says you have existing containers with those same names already. Left to its own, Compose will assign non-conflicting names, and you can almost always just delete container_name: from the Compose file.

version: '3.8'
services:
  app:
    image: prod:1.0
    ports:
      - "81:80"
    depends_on: [db, phpmyadmin]
    # no container_name: or links:
  db: { ... }
  phpmyadmin: { ... }

The other obvious point of conflict for running the same Compose file in multiple places is the ports:; only one container or host process can listen on a given (first) port number. If you're trying to run the same Compose file multiple times on the same system you might need some way to replace the port numbers. This could be a place where using multiple Compose files fits in well: define a base docker-compose.yml that defines the services but not any of the ports, and an override file that assigns specific host ports.

  • Related