docker-compose java 应用程序连接到 mongodb [英] docker-compose java application connection to mongodb

查看:46
本文介绍了docker-compose java 应用程序连接到 mongodb的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

2 个容器,一个 Java 应用程序和第二个 mongodb.

2 Containers, one Java application and the second mongodb.

如果我在本地运行我的 java 应用程序并在容器中运行 mongodb,它会连接,但如果两者都在容器内运行,则 java 应用程序无法连接到 mongodb.

If I run my java app locally and mongodb in a container, it connects but if both run inside a container, java app can't connect to mongodb.

docker-compose 文件如下,是不是遗漏了什么

docker-compose file is as follows, am I missing something

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

编辑

我也对以下内容感到困惑.

I'm also confused about the following.

links:
  - mongo

depends_on:
  - mongo

推荐答案

2019年7月docker官方文档:

At 2019 July, official docker documentation :

来源:https://docs.docker.com/compose/compose-文件/#links

使用环境变量将所有配置集中在一个文件中,并在docker-compose up

Centralize all configurations in a file with environment variables and execute it before docker-compose up

以下方法对我有帮助:

  • 如果你需要运行多个 docker-compose.yml 文件,它们之间存在依赖关系
  • 您的 docker-compose 中的某些服务需要连接到同一台机器上的另一个进程.这个过程可能是一个 docker 容器,也可能不是.
  • 您需要在多个 docker-compose 文件(如主机、密码等)之间共享变量

此文件可以命名为:/env/company_environments 是否带有扩展名.

This file could be named: /env/company_environments with extension or not.

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

docker-compose A

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

docker-compose 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 命令之前添加源代码:

Startup your apps

Just add source before docker-compose commands:

source /env/company_environments
docker-compose up -d

如果你有另一个 docker-compose.yml 文件,你只需要在你另一个 docker-compose.yml 的文件夹中执行相同的命令:

If you have another docker-compose.yml file , you just need to execute the same commands in the folder of your another docker-compose.yml:

source /env/company_environments
docker-compose up -d

这篇关于docker-compose java 应用程序连接到 mongodb的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆