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。
我也试图在我的本地机器上运行它,并且按预期工作,因为mongoadmin
和app
都可以连接到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"