docker链接parsing到本地主机

我困在一个非常奇怪的docker问题,我以前没有遇到过。 我想要做的是使用docker-compose使我的应用程序可以从互联网上获得。 目前它正在DigitalOcean上的一个实例上运行,我目前正在使用以下docker-compose.yml

  version: '2.2' services: mongodb: image: mongo:3.4 volumes: - ./mongo:/data/db ports: - "27017" mongoadmin: # web UI for mongo image: mongo-express ports: - "8081:8081" links: - "mongodb:mongo" environment: - ME_CONFIG_OPTIONS_EDITORTHEME=ambiance - ME_CONFIG_BASICAUTH_USERNAME=user - ME_CONFIG_BASICAUTH_PASSWORD=pass app: image: project/name:0.0.1 volumes: - ./project:/usr/src/app working_dir: /usr/src/app links: - "mongodb:mongodb" environment: - NODE_ENV=production command: ["npm", "start"] ports: - "3000:3000" 

Mongoadmin连接正确,并能连接到数据库,而数据库本身不能从主机外部连接。

问题是,该应用程序将无法连接到正确的地址。 这是一个使用mongoose连接到数据库的快速服务器。 连接之前,我正在logging它将连接到的url。 在我的config.js中,我列出了mongodb://mongodb/project ,但是这被parsing为localhost从而导致MongoError: failed to connect to server [localhost:27017] on first connect 。 容器的名称已parsing,但未parsing到正确的地址。

我试图连接到IP地址(在172.18.0.0范围内)的docker寻址到容器,但也解决了本地主机。 我看了/ etc / hosts,但是这并没有显示任何与此有关的东西。 此外,因为mongo-express容器能够连接,所以我很困惑。

我试过更改容器的名称,认为它可能是由于某些原因,由于之前的运行或类似的东西阻止,但这并不能解决问题

我已经尝试了显式links和隐式使用docker的内部DNSparsing,但都没有工作。

将端口27017绑定到本地主机时,它能够连接,但是由于安全性和通过环境variables的简单configuration,我宁愿将mongodb实例绑定到localhost。

我也试图在我的本地机器上运行它,并且按预期工作,因为mongoadminapp都可以连接到mongodb容器。 我的localmachine运行Docker version 1.12.6, build 78d1802 ,而VPS在Docker version 17.06.2-ce, build cec0b72上运行Docker version 17.06.2-ce, build cec0b72 ,因此是一个更新的版本。

这可能是一个新引入的错误? 还是我错过了别的? 任何帮助,将不胜感激。

您的docker-compose文件似乎没有链接应用程序和mongodb容器。

你有这个:

 app: image: project/name:0.0.1 volumes: - ./project:/usr/src/app working_dir: /usr/src/app environment: - NODE_ENV=production command: ["npm", "start"] ports: - "3000:3000" 

虽然我认为这应该是这样的:

 app: image: project/name:0.0.1 volumes: - ./project:/usr/src/app working_dir: /usr/src/app links: - "mongodb:mongodb" environment: - NODE_ENV=production command: ["npm", "start"] ports: - "3000:3000"