如何正确设置我的Keystone.js应用程序以使用mongo在docker中运行?

问题描述 投票:0回答:1

我构建了我的应用程序,在本地运行良好。当我尝试在docker(docker-compose up)中运行它时,它似乎启动,但然后抛出一条错误消息:

Creating mongodb ... done
Creating webcms  ... done
Attaching to mongodb, webcms

...

Mongoose connection "error" event fired with:
    MongoError: failed to connect to server [localhost:27017] on first connect

...

webcms exited with code 1

我已经读过Keystone.js你需要在.env文件中配置Mongo位置,我有:

MONGO_URI=mongodb://localhost:27017

这是我的Docker文件:

# Use node 9.4.0
FROM node:9.4.0

# Copy source code
COPY . /app

# Change working directory
WORKDIR /app

# Install dependencies
RUN npm install

# Expose API port to the outside
EXPOSE 3000

# Launch application
CMD ["node","keystone"]

......和我的码头组成

version: "2"
services:
  # NodeJS app
  web:
    container_name: webcms
    build: .
    ports:
    - 3000:3000
    depends_on:
    - mongo

  # MongoDB
  mongo:
    container_name: mongo
    image: mongo
    volumes:
      - ./data:/data/db/mongo
    ports:
      - 27017:27017

当我运行docker ps时,它确认mongo已启动并在容器中运行...

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                      NAMES
f3e06e4a5cfe        mongo               "docker-entrypoint.s…"   2 hours ago         Up 2 hours          0.0.0.0:27017->27017/tcp   mongodb

我要么丢失了一些配置,要么我配置错误。有人能告诉我那是什么吗?

任何帮助,将不胜感激。

谢谢!

mongodb docker docker-compose keystonejs
1个回答
2
投票

由于您发送了错误的主机,因此无法正常工作。你的容器不明白什么是localhost:27017,因为它是你的计算机地址而不是它的容器地址。

重要的是要了解每个服务都有自己的容器和不同的IP。码头工人的美丽 - 你不需要知道你的集装箱地址!足以知道您的服务名称:

version: "2"

volumes:
  db-data:
    driver: local

services:
  web:
    build: .
    ports:
      - 3000:3000
    depends_on:
      - mongo
    environment:
      - MONGO_URI=mongodb://mongo:27017

  mongo:
    image: mongo
    volumes:
      - "db-data:/data/db/mongo"
    ports:
      - 27017:27017

只需运行docker-compose up就可以了

© www.soinside.com 2019 - 2024. All rights reserved.