簡體   English   中英

docker-compose java應用程序連接到mongodb

[英]docker-compose java application connection to mongodb

2個容器,一個Java應用程序和第二個mongodb。

如果我在本地運行Java應用程序,並且在容器中運行mongodb,它將連接,但如果兩者都在容器中運行,則Java應用程序將無法連接至mongodb。

docker-compose文件如下,我是否缺少某些東西

version: "3"

services:

  user:
    image: jboss/wildfly
    container_name: "user"
    restart: always
    ports:
      - 8081:8080
      - 65194:65193
    volumes:
      - ./User/target/User.war:/opt/jboss/wildfly/standalone/deployments/User.war
    environment:
      - JAVA_OPTS=-agentlib:jdwp=transport=dt_socket,address=0.0.0.0:65193,suspend=n,server=y -Djava.net.preferIPv4Stack=true
      - MONGO_HOST=localhost
      - MONGO_PORT=27017
      - MONGO_USERNAME=myuser
      - MONGO_PASSWORD=mypass
      - MONGO_DATABASE=mydb
      - MONGO_AUTHDB=admin
    command: >
      bash -c "/opt/jboss/wildfly/bin/add-user.sh admin Admin#007 --silent && /opt/jboss/wildfly/bin/standalone.sh -b 0.0.0.0 -bmanagement 0.0.0.0"
    links:
      - mongo

  mongo:
    image: mongo:4.0.10
    container_name: mongo
    restart: always
    volumes:
       - ./assets:/docker-entrypoint-initdb.d/
    environment:
      - MONGO_INITDB_ROOT_USERNAME=myuser
      - MONGO_INITDB_ROOT_PASSWORD=mypass
    ports:
      - 27017:27017
      - 27018:27018
      - 27019:27019

編輯

我也對以下內容感到困惑。

links:
  - mongo

depends_on:
  - mongo

您可能無法連接,因為您將MONGO_HOST設置為localhost並且mongo是鏈接服務。

為了使用鏈接的服務網絡,你必須指定MONGO_HOST作為服務的名稱- mongo ,這樣的:

 MONGO_HOST=mongo

在2019年7月,官方Docker文檔:

不推薦使用docker-compose鏈接

來源: https : //docs.docker.com/compose/compose-file/#links

可能的解決方案

使用環境變量將所有配置集中在一個文件中,並在docker-compose up之前執行它

在這種情況下,以下方法可以幫助我:

  • 如果您需要運行多個docker-compose.yml文件,它們之間具有依賴性
  • 您的docker-compose中的某些服務需要連接到同一台機器上的另一個進程。 此過程可以是docker容器,也可以不是。
  • 您需要在多個docker-compose文件之間共享變量,例如主機,密碼等

腳步

創建一個文件以集中配置

該文件可以命名為: / env / company_environments,帶擴展名或不帶擴展名。

export MACHINE_HOST=$(hostname -I | awk '{print $1}')
export GLOBAL_LOG_PATH=/my/org/log
export MONGO_PASSWORD=mypass
export ANOTHER_GLOBAL_VARIABLE=123456

碼頭工人組成A

app1:
  environment:
    - MONGO_HOST=$MACHINE_HOST
    - MY_TOKEN=$ANOTHER_GLOBAL_VARIABLE

碼頭工人組成B

app2:
  environment:
    - LOG_PATH=$GLOBAL_LOG_PATH
    - MONGO_PASSWORD=$MONGO_PASSWORD
    - NOT_DOCKER_POSTGRESS_JDBC_URL_IN_SAME_MACHINE=jdbc:postgresql://$MACHINE_HOST/database

啟動您的應用

只需在docker-compose命令之前添加源代碼:

source /env/company_environments
docker-compose up -d

如果您還有另一個docker-compose.yml文件,則只需在另一個docker-compose.yml文件夾中執行相同的命令:

source /env/company_environments
docker-compose up -d

暫無
暫無

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

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