【问题标题】:DEVOPS: Express and Mongo Docker Container NetworkingDEVOPS:Express 和 Mongo Docker 容器网络
【发布时间】:2018-09-18 09:36:18
【问题描述】:

我一直在写this awesome Express & MongoDB 应用程序,只是为了好玩, 1:https://github.com/mwaz/oober-bck,一切都在离线状态下完美运行,我为不同的应用程序环境(例如开发、登台、测试和生产)设置了不同的数据库配置,实际上在每个环境中,数据库都是不同的,给定 MongoDB灵活,我们对此没有问题。

由于应用程序通过将 $NODE_ENV 变量设置为我的本地计算机上所需的应用程序环境来正常工作,所以当应用程序被 docker 化时一切都应该正常工作,但事实并非如此,mongoDB 在某些时候崩溃并且确实未连接到应用程序,这是示例日志

Docker文件如下:

FROM node:7
WORKDIR /app
COPY package.json /app
RUN npm install
COPY . /app
CMD node app.js
EXPOSE 3003

docker-compose.yml 文件

version: "2"
services:
  app:
    container_name: oober
    restart: always
    build: .
    ports:
      - "3003:3003"
    environment:
      - NODE_ENV=STAGING
    links:
      - mongo
  mongo:
    container_name: mongo
    image: mongo
    ports:
      - "27017:27017"

可以使用此链接在 dockerhub 上找到 docker 映像

docker pull sparatan/oober_app

【问题讨论】:

  • @DavidMaze Express Js 从一个服务器文件连接到数据库,在上面,它位于 GitHub 存储库链接,在应用程序文件夹中名为 app.js
  • 如果有人离开 cmets 而不是投反对票,我也将不胜感激,因为您不理解该问题,或者您认为根据您的专业知识或知识提出的问题不正确
  • @DavidMaze 重现:使用 docker pull sparatan/oober_app 从 docker-hub 拉取容器,使用 docker-compose up 启动应用程序,我只包含相关内容,这是一个 DevOps 问题因此我只附加了相关的 docker 配置文件,不需要您深入研究我的 GitHub 存储库。 ,还需要包括哪些其他细节,请澄清。应用没问题,配置是问题

标签: mongodb docker docker-compose dockerfile devops


【解决方案1】:

您的暂存数据库的默认配置是DATABASE: "mongodb://localhost:27017/staging_ooberdb",如您的config.js 文件中所示。

在 docker 环境中,您使用“localhost”将引用容器本身(在这种情况下,您的“oober”容器。

您需要在 config.js 文件的 STAGING 部分中使用 mongodb 容器名称,例如 DATABASE: "mongodb://mongo:27017/staging_ooberdb"

附带说明,您可能不想在生产环境中公开 mongodb 端口。

【讨论】:

  • 配置文件只有配置变量,获取值,我只是获取对象中的值,例如 config[process.env.NODE_ENV]['DATABASE'];在 config.js 文件中,我有几个环境,每个环境都有一个配置,问题不在于应用程序不起作用,它甚至在容器中连接,请参考上面的日志
  • 请通过:github.com/mwaz/oober-bck/blob/master/config.jsgithub.com/mwaz/oober-bck/blob/master/app.js 你可能了解一两件事,关于应用程序如何运行和环境变量,环境变量 NODE_ENV 承载了该特定环境的所有配置
  • 我不确定你想要什么。我确实看过它,我的答案仍然有效。不行吗?
  • 我想要的只是解释为什么 MongoDB 在容器内启动然后崩溃,以及如何解决,在我看来,这可能是网络问题,但不是配置问题,因为两者应用启动时应用和 mongoDB 容器启动
  • Mongodb 没有崩溃。您的 oober 容器正在崩溃,因为它无法连接到您的 mongodb。由于 docker 网络的工作方式,这是一个配置问题。来自 docker 的 This blog post 可能会有所帮助。基本上每个容器都有自己的 IP 地址/主机名,因此 localhost 将始终引用“自身”,您应该使用它们的主机名(也是容器名称)连接容器。
猜你喜欢
  • 1970-01-01
  • 2016-02-27
  • 2017-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-06
  • 2019-07-27
  • 1970-01-01
相关资源
最近更新 更多