Home > OS >  docker-compose service names
docker-compose service names

Time:06-12

I just started using docker-compose and I am enjoying it.

I recently just created my first docker-compose file that simply connects sonarqube and postgres. Inside my docker-compose.yml file, whenever I define the database service with any other name besides "db", my docker-compose does not run successfully.

This is the error:

 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jdk.internal.loader.ClassLoaders$AppClassLoader@277050dc-org.sonar.db.DefaultDatabase': Initialization of bean failed; nested exception is java.lang.IllegalStateException: Fail to connect to database

This is the code in my docker compose file:

version: "3"

services:

sonarqube:
    image: sonarqube
    expose:
      - 9000

    ports:
      - "127.0.0.1:9000:9000"

    networks:
      - sonarnet

    environment:
      - sonar.jdbc.url=jdbc:postgresql://db:5432/sonar
      - sonar.jdbc.username=sonar
      - sonar.jdbc.password=sonar

    volumes:
      - sonarqube_conf:/opt/sonarqube/conf
      - sonarqube_data:/opt/sonarqube/data
      - sonarqube_extensions:/opt/sonarqube/extensions
      - sonarqube_bundled-plugins:/opt/sonarqube/lib/bundled-plugins

db:
    image: postgres
    networks:
      - sonarnet
    ports:
      - "5432:5432"

    environment:
      - POSTGRES_USER=sonar
      - POSTGRES_PASSWORD=sonar

    volumes:
      - postgresql:/var/lib/postgresql
      - postgresql_data:/var/lib/postgresql/data

networks:
  sonarnet:

volumes:
  sonarqube_conf:
  sonarqube_data:
  sonarqube_extensions:
  sonarqube_bundled-plugins:
  postgresql:
  postgresql_data:

Is there anything special about the name "db"? Are there any conventions/rules for defining services in docker-compose?

Thank you.

CodePudding user response:

You have to change the service name also within the sonarqube's connections string.

here, replace the string db with how you renamed the service for postgres (these have to match):

    environment:
      - sonar.jdbc.url=jdbc:postgresql://db:5432/sonar
#                                         ^ here

It is needed, because docker-compose registers hostnames (defined by service names) for the stack so they are always dynamically accessible.

CodePudding user response:

Update your docker-compose with depends_on property to let docker know that db should be created firstly:

version: "3"

services:

sonarqube:
  image: sonarqube
  expose:
    - 9000

  ports:
    - "127.0.0.1:9000:9000"

  networks:
    - sonarnet

  environment:
    - sonar.jdbc.url=jdbc:postgresql://db:5432/sonar
    - sonar.jdbc.username=sonar
    - sonar.jdbc.password=sonar

  volumes:
    - sonarqube_conf:/opt/sonarqube/conf
    - sonarqube_data:/opt/sonarqube/data
    - sonarqube_extensions:/opt/sonarqube/extensions
    - sonarqube_bundled-plugins:/opt/sonarqube/lib/bundled-plugins
  depends_on:
    - db

db:
  image: postgres
  networks:
    - sonarnet
  ports:
    - "5432:5432"

  environment:
    - POSTGRES_USER=sonar
    - POSTGRES_PASSWORD=sonar

  volumes:
    - postgresql:/var/lib/postgresql
    - postgresql_data:/var/lib/postgresql/data

networks:
  sonarnet:


volumes:
  sonarqube_conf:
  sonarqube_data:
  sonarqube_extensions:
  sonarqube_bundled-plugins:
  postgresql:
  postgresql_data:
  • Related