簡體   English   中英

docker-compose 服務名稱

[英]docker-compose service names

我剛開始使用 docker-compose,我很享受。

我最近剛剛創建了我的第一個 docker-compose 文件,它只連接了 sonarqube 和 postgres。 在我的 docker-compose.yml 文件中,每當我使用“db”以外的任何其他名稱定義數據庫服務時,我的 docker-compose 都不會成功運行。

這是錯誤:

 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

這是我的 docker compose 文件中的代碼:

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:

“db”這個名字有什么特別之處嗎? 在 docker-compose 中定義服務是否有任何約定/規則?

謝謝你。

使用depends_on屬性更新您的 docker-compose,讓 docker 知道應該首先創建 db:

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:

您還必須在 sonarqube 的連接字符串中更改服務名稱。

在這里,將字符串db替換為您為 postgres 重命名服務的方式(這些必須匹配):

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

它是必需的,因為docker-compose為堆棧注冊主機名(由服務名稱定義),因此它們始終可以動態訪問。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM