将Docker服务容器中的应用程序连接到在外部网络Docker容器上运行的数据库

时间:2019-08-26 04:41:29

标签: docker docker-compose

我正在尝试将属于 docker-compose服务的某些应用程序连接到在同一主机上使用自己网络的单独docker容器中运行的MongoDB 。应用程序应使用哪个URL连接到该外部网络?

我的步骤...

创建一个网络并在该网络上启动MongoDB:

docker network create my_app_mongo_db
docker run --name db-mongo -d --network=my_app_mongo_db -p 27017:27017 mongo

像这样创建docker-compose.yaml

version: "3"
services:
  my_app:
    image: my_app
    container_name: my_app
    networks:
      - default
      - my_app_mongo_db
networks:
  default:
  my_app_mongo_db:
    external: true

docker-compose -up正常运行,并且docker network inspect my_app_mongo_db显示该服务已连接到外部网络。

接下来,我尝试使用此URL连接到MongoDB,类似地,如果数据库作为服务运行,我将如何连接到数据库:

mongodb://my_app_mongo_db:27017

但是,这种方法不适用于外部网络。起作用的是使用host.docker.internal

mongodb://host.docker.internal:27017

但是根据this Docker doc

  

这是出于开发目的,不适用于Mac的Docker Desktop以外的生产环境。

任何想法在服务器上运行时如何解决?

1 个答案:

答案 0 :(得分:1)

您需要使用Container名称而不是网络进行连接,请尝试以下操作:

mongodb://db-mongo:27017