Mongodb DEVOPS:Express和Mongo Docker容器网络

Mongodb DEVOPS:Express和Mongo Docker容器网络,mongodb,docker,docker-compose,dockerfile,devops,Mongodb,Docker,Docker Compose,Dockerfile,Devops,我一直在编写Express&MongoDB应用程序,只是为了好玩, :,一切都可以完美地脱机工作,我为不同的应用程序环境(例如,开发、登台、测试和生产)提供了不同的数据库配置,从真正意义上讲,在每个环境中,数据库都是不同的,并且鉴于MongoDB是灵活的,我们对此没有问题 由于通过将$NODE_ENV变量设置为我的本地计算机上所需的应用程序环境,应用程序可以正常工作,因此当应用程序被停靠时,一切都应该正常工作,但事实并非如此,mongoDB在某个点崩溃,并且没有连接到应用程序,下面是示例日志

我一直在编写Express&MongoDB应用程序,只是为了好玩, :,一切都可以完美地脱机工作,我为不同的应用程序环境(例如,开发、登台、测试和生产)提供了不同的数据库配置,从真正意义上讲,在每个环境中,数据库都是不同的,并且鉴于MongoDB是灵活的,我们对此没有问题

由于通过将$NODE_ENV变量设置为我的本地计算机上所需的应用程序环境,应用程序可以正常工作,因此当应用程序被停靠时,一切都应该正常工作,但事实并非如此,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

暂存数据库的默认配置是
数据库:mongodb://localhost:27017/staging_ooberdb“
如文件所示

在docker环境中,当您使用“localhost”时,将引用容器本身(在本例中是指“oober”容器)

您需要使用mongodb容器名称,如以下
数据库:mongodb://mongo:27017/staging_ooberdb“
在config.js文件的暂存部分


作为补充说明,您可能不想在生产环境中公开mongodb端口。

暂存数据库的默认配置是
数据库:mongodb://localhost:27017/staging_ooberdb“
如文件所示

在docker环境中,当您使用“localhost”时,将引用容器本身(在本例中是指“oober”容器)

您需要使用mongodb容器名称,如以下
数据库:mongodb://mongo:27017/staging_ooberdb“
在config.js文件的暂存部分


作为补充说明,您可能不想在生产环境中公开mongodb端口。

@DavidMaze Express Js通过服务器文件连接到数据库,在上面,它位于GitHub存储库中,应用程序文件夹中的链接名为app.Js。如果有人留下评论而不是否决beca,我将不胜感激使用您不理解的问题,或者根据您的专业知识或经验,您觉得问题的提问不正确knowledge@DavidMaze复制:使用docker pull sparatan/oober_应用程序从docker hub中拉出容器,使用docker compose up启动应用程序,我只包含相关内容,这是DevOps的问题如果我只附上docker配置文件,这是相关的,不需要您深入我的GitHub存储库。需要包括哪些其他详细信息,请澄清。应用程序很好,配置是problem@DavidMazeexpressjs从服务器文件连接到数据库,在上面,它位于GitHub repository链接在应用程序文件夹中的名称为app.js。如果有人因为您不理解问题或根据您的专业知识或经验认为问题没有被正确提问而留下评论而不是否决,我也将不胜感激knowledge@DavidMaze复制:使用从docker hub拉出容器docker pull sparatan/oober_应用程序,使用docker compose up启动应用程序,我只包含了相关的内容,这是DevOps问题,因此我只附加了docker配置文件,这是相关的,不需要您深入我的GitHub存储库。需要包含哪些其他详细信息,请澄清。应用程序很好,配置就是问题配置文件中只有配置变量,获取值时,我只获取对象中的值,例如config[process.env.NODE_env]['DATABASE'];在config.js文件中,我有几个环境,每个环境都有一个配置,问题不是应用程序不工作,它甚至在容器中连接,请参考上面的日志,请仔细阅读:您可能了解一两件事,关于应用程序如何运行以及环境变量、环境变量节点_ENV,为特定环境提供了所有配置我不确定您想要什么。我确实查看了它,我的答案仍然有效。它不起作用吗?我只想解释一下为什么MongoDB在容器内启动然后崩溃,以及如何解决,在我看来这可能是一个网络问题,但不是一个配置问题,因为应用程序和mongoDB容器在应用程序启动时启动。mongoDB没有崩溃。你的oober容器崩溃是因为它无法连接到你的mongoDB。这是一个配置问题,因为docker网络的工作方式。from docker可能会有所帮助。基本上每个容器都有自己的IP地址/主机名,因此localhost将始终引用“自身”,您应该使用其主机名(也是容器名称)连接容器。配置文件中只有用于配置的变量,要获取值,我只需获取对象中的值,例如config[process.env.NODE_env]['DATABASE'];在config.js文件中,我有几个环境,每个环境都有一个配置,问题不是应用程序不工作,它甚至在容器中连接,请参考上面的日志,请仔细阅读:您可能了解一两件事,关于应用程序如何运行以及环境变量、环境变量节点_ENV,为特定环境提供了所有配置我不确定您想要什么。我确实查看了它,我的答案仍然有效。它不起作用吗?我只想解释一下为什么MongoDB在容器内启动然后崩溃,以及如何解决,在我看来这可能是一个网络问题,但不是一个配置问题,因为应用程序和mongoDB容器在应用程序启动时启动mongoDB没有崩溃。您的oober conta