Mongodb 如何正确设置Keystone.js应用程序,使其在docker和mongo中运行?
我已经建立了我的应用程序,在本地运行良好。当我尝试在docker(docker compose up)中运行它时,它似乎开始运行,但随后抛出一条错误消息: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
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外部文件夹中。以避免删除。