【问题标题】:How do I add MongoDB to a Docker container?如何将 MongoDB 添加到 Docker 容器?
【发布时间】:2019-09-19 07:26:31
【问题描述】:

我有一个用 NodeJS 编写的应用程序,我想定期测试它,最好是在一个隔离的 Docker 容器中。

我一直在关注这里的教程:Testing a Node.JS Application Within a Docker Container。它演示的一件事是如何在 Docker 容器中运行测试,以及如何设置 Dockerfile。例如:

# This official base image contains node.js and npm
FROM node:7
ARG VERSION=1.0.0
# Copy the application files
WORKDIR /usr/src/app
COPY package.json app.js LICENSE /usr/src/app/
COPY lib /usr/src/app/lib/
LABEL license=MIT \
      version=$VERSION
# Set required environment variables
ENV NODE_ENV production
# Download the required packages for production
RUN npm update
# Make the application run when running the container
CMD ["node", "app.js"]

由于我的应用程序使用 MongoDB,我需要一个正在运行的 MongoDB 实例来正确测试我的应用程序。我想在 Docker 容器中包含 MongoDB。

我找不到任何关于如何执行此操作的说明(或更一般地说,如何将任何数据库添加到容器中)。任何提示将不胜感激

【问题讨论】:

标签: node.js mongodb docker dockerfile


【解决方案1】:

我认为拥有多用途容器(即业务逻辑 + db)并不是真正的 docker,所以这可能是您找不到任何相关信息的原因。在这种情况下,您应该做的是使用多个容器,公开正确的端口,然后从您的应用程序中调用它。

我建议你研究 Docker-Compose 来做这样的基础设施,它可能有两种服务:一种用于您的节点服务器,另一种用于您的 mongoDB。

它甚至比将所有服务都放在一个容器中更容易维护和配置,因为您可以轻松拆分逻辑。

编辑:我没有测试下面的 docker-compose.yml,所以它可能需要一些修复,但如果你阅读 documentation ,它应该对你有足够的帮助。

从这里开始,你可以有一个看起来像这样的 docker-compose.yml 文件:

version: "3"
services:
  app:
    container_name: app
    restart: always
    build: ./path/to/your/dockerfile/root
    ports:
      - "3000:3000"
    links:
      - mongo
  mongo:
    container_name: mongo
    image: mongo
    volumes:
      - ./data:/data/db
    ports:
      - "27017:27017"

然后,在您的应用程序中,您可以从这种 url 访问您的数据库:mongodb://mongo:27017/db

【讨论】:

  • 感谢您提供 docker compose 信息和示例配置
猜你喜欢
  • 2015-02-26
  • 2017-07-11
  • 1970-01-01
  • 2019-01-12
  • 2015-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多