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

-1 mongodb docker docker-compose keystonejs

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

\n\n
Creating mongodb ... done\nCreating webcms  ... done\nAttaching to mongodb, webcms\n\n...\n\nMongoose connection "error" event fired with:\n    MongoError: failed to connect to server [localhost:27017] on first connect\n\n...\n\nwebcms exited with code 1\n
Run Code Online (Sandbox Code Playgroud)\n\n

我读到,使用Keystone.js,您需要在.env文件中配置 Mongo 位置,我有:

\n\n
MONGO_URI=mongodb://localhost:27017\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是我的 Docker 文件:

\n\n
# Use node 9.4.0\nFROM node:9.4.0\n\n# Copy source code\nCOPY . /app\n\n# Change working directory\nWORKDIR /app\n\n# Install dependencies\nRUN npm install\n\n# Expose API port to the outside\nEXPOSE 3000\n\n# Launch application\nCMD ["node","keystone"]\n
Run Code Online (Sandbox Code Playgroud)\n\n

...和我的 docker-compose

\n\n
version: "2"\nservices:\n  # NodeJS app\n  web:\n    container_name: webcms\n    build: .\n    ports:\n    - 3000:3000\n    depends_on:\n    - mongo\n\n  # MongoDB\n  mongo:\n    container_name: mongo\n    image: mongo\n    volumes:\n      - ./data:/data/db/mongo\n    ports:\n      - 27017:27017\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                      NAMES\nf3e06e4a5cfe        mongo               "docker-entrypoint.s\xe2\x80\xa6"   2 hours ago         Up 2 hours          0.0.0.0:27017->27017/tcp   mongodb\n
Run Code Online (Sandbox Code Playgroud)\n\n

我要么缺少一些配置,要么配置不正确。有人能告诉我那是什么吗?

\n\n

任何帮助,将不胜感激。

\n\n

谢谢!

\n

Yai*_*r.R 5

它无法正常工作,因为您发送了错误的主机。您的容器不知道是什么,localhost:27017因为它是您的计算机地址而不是其容器地址。

重要的是要了解每个服务都有自己的具有不同 IP 的容器。docker-compose 的美妙之处在于您不需要知道您的容器地址!足以知道您的服务名称:

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
Run Code Online (Sandbox Code Playgroud)

只要跑docker-compose up就可以了