Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 如何正确设置Keystone.js应用程序,使其在docker和mongo中运行?_Mongodb_Docker_Docker Compose_Keystonejs - Fatal编程技术网

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

Mongodb 如何正确设置Keystone.js应用程序,使其在docker和mongo中运行?,mongodb,docker,docker-compose,keystonejs,Mongodb,Docker,Docker Compose,Keystonejs,我已经建立了我的应用程序,在本地运行良好。当我尝试在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 se

我已经建立了我的应用程序,在本地运行良好。当我尝试在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
我要么缺少一些配置,要么配置不正确。有人能告诉我那是什么吗

任何帮助都将不胜感激


谢谢

它无法正常工作,因为您发送了错误的主机。 您的容器不了解什么是
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

只需运行
docker compose up
,您就可以完成所有设置

因为您发送了错误的主机,所以它无法正常工作。 您的容器不了解什么是
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

只需运行
docker compose up
,就可以完成所有设置

如果不希望出现复杂情况,最好使用mongo db atlas。您可以在本地和部署中使用它

中提供了获取mongo url的简单步骤

然后添加一个env变量 连接到=mongodb://your_url

要将.env传递给docker,请使用

docker run --publish 8000:3000 --env-file .env --detach --name kb keystoneblog:1.0

如果不希望出现并发症,最好使用mongo db atlas。您可以在本地和部署中使用它

中提供了获取mongo url的简单步骤

然后添加一个env变量 连接到=mongodb://your_url

要将.env传递给docker,请使用

docker run --publish 8000:3000 --env-file .env --detach --name kb keystoneblog:1.0

以下几点可能会有所帮助:

首先。我不确定您的错误日志是什么样子,但我的错误日志中包含的是:

…错误:在生产环境中运行Keystone时需要cookieSecret配置选项。请更新应用程序或环境配置,以便将此值提供给Keystone构造函数….

要解决此问题,请在Keystone条目文件(例如:index.js)中确保Keystone构造函数的
cookieSecret
参数设置正确:
process.env.NODE\u env===='production'

下一个。从生成的一个Keystone(
mongoUri:mongodb://localhost/my-keystone
)至:
mongoUri:'mongodb://mongo:27017“
。Docker需要这个,因为它是mongo容器地址。此更改还应反映在MONGO_URI下环境变量下的docker compose文件中:

。。。环境:-MONGO_URI=mongodb://mongo:27017 …

在这些更改之后,Keystone构造函数应该如下所示:

const keystone = new Keystone({
  adapter: new Adapter(adapterConfig),
  cookieSecret: process.env.NODE_ENV === 'production',
  sessionStore: new MongoStore({ url: 'mongodb://mongo:27017' }),
});
还有你的docker compose文件,类似这样(我使用了一个网络,而不是docker compose的链接,因为docker已经声明这是一个遗留选项。我已经包括了我的,以防它对其他人有用):


以下几点可能会有所帮助:

首先。我不确定您的错误日志是什么样子,但我的错误日志中包含的是:

…错误:在生产环境中运行Keystone时需要cookieSecret配置选项。请更新应用程序或环境配置,以便将此值提供给Keystone构造函数….

要解决此问题,请在Keystone条目文件(例如:index.js)中确保Keystone构造函数的
cookieSecret
参数设置正确:
process.env.NODE\u env===='production'

下一个。从生成的一个Keystone(
mongoUri:mongodb://localhost/my-keystone
)至:
mongoUri:'mongodb://mongo:27017“
。Docker需要这个,因为它是mongo容器地址。此更改还应反映在MONGO_URI下环境变量下的docker compose文件中:

。。。环境:-MONGO_URI=mongodb://mongo:27017 …

在这些更改之后,Keystone构造函数应该如下所示:

const keystone = new Keystone({
  adapter: new Adapter(adapterConfig),
  cookieSecret: process.env.NODE_ENV === 'production',
  sessionStore: new MongoStore({ url: 'mongodb://mongo:27017' }),
});
还有你的docker compose文件,类似这样(我使用了一个网络,而不是docker compose的链接,因为docker已经声明这是一个遗留选项。我已经包括了我的,以防它对其他人有用):


使用此方法将在项目文件中创建数据。如何将mongodb存储到ubuntu外部文件夹中。以避免删除。使用此方法将在项目文件中创建数据。如何将mongodb存储到ubuntu外部文件夹中。以避免删除。