docker - 有关在 Google Cloud App Engine 上部署 Meteor 应用程序的问题:APP_CONTAINER_CRASHED
问题描述
TL;博士
克隆这个:https ://github.com/calvan-liang/radgrad2googlecloudissue 。
确保您安装了 meteor-google-cloud 和 gcloud CLI。如果不:
在 Powershell 上:
npm install meteor-google-cloud -g
在 Ubuntu 终端上:
echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg]
https://packages.cloud.google.com/apt cloud-sdk main" | sudo tee -a
/etc/apt/sources.list.d/google-cloud-sdk.list
sudo apt-get install apt-transport-https ca-certificates gnupg
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key --
keyring /usr/share/keyrings/cloud.google.gpg add -
sudo apt-get update && sudo apt-get install google-cloud-sdk
meteor-google-cloud --init
如果不成功或不是 Ubuntu:https ://cloud.google.com/sdk/install
要部署,在 app 目录中:
meteor-google-cloud --settings deploy/settings.json --app deploy/app.yml --
docker deploy/Dockerfile
APP_CONTAINER_CRASHED 的原因是什么,如何解决?
.
.
.
.
.
目前遵循https://github.com/EducationLink/meteor-google-cloud中的 README.md以使用 Google Cloud 部署预先存在的项目。在部署的第四步。默认服务正在更新时,我收到此错误:
ERROR: (gcloud.app.deploy) Error Response: [9]
Application startup error! Code: APP_CONTAINER_CRASHED
/app/programs/server/node_modules/fibers/future.js:313
throw(ex);
^
MongoNetworkError: failed to connect to server [bla.com:27017] on first connect [MongoNetworkError: connection timed out
at connectionFailureError (/app/programs/server/npm/node_modules/meteor/npm-mongo/node_modules/mongodb/lib/core/connection/connect.js:406:14)
at Socket.<anonymous> (/app/programs/server/npm/node_modules/meteor/npm-mongo/node_modules/mongodb/lib/core/connection/connect.js:294:16)
at Object.onceWrapper (events.js:417:28)
at Socket.emit (events.js:311:20)
at Socket.EventEmitter.emit (domain.js:482:12)
at Socket._onTimeout (net.js:478:8)
at listOnTimeout (internal/timers.js:549:17)
at processTimers (internal/timers.js:492:7) {
name: 'MongoNetworkError',
[Symbol(mongoErrorContextSymbol)]: {}
}]
at Pool.<anonymous> (/app/programs/server/npm/node_modules/meteor/npm-mongo/node_modules/mongodb/lib/core/topologies/server.js:438:11)
at Pool.emit (events.js:311:20)
at Pool.EventEmitter.emit (domain.js:482:12)
at /app/programs/server/npm/node_modules/meteor/npm-mongo/node_modules/mongodb/lib/core/connection/pool.js:561:14
at /app/programs/server/npm/node_modules/meteor/npm-mongo/node_modules/mongodb/lib/core/connection/pool.js:994:11
at /app/programs/server/npm/node_modules/meteor/npm-mongo/node_modules/mongodb/lib/core/connection/connect.js:31:7
at callback (/app/programs/server/npm/node_modules/meteor/npm-mongo/node_modules/mongodb/lib/core/connection/connect.js:264:5)
at Socket.<anonymous> (/app/programs/server/npm/node_modules/meteor/npm-mongo/node_modules/mongodb/lib/core/connection/connect.js:294:7)
at Object.onceWrapper (events.js:417:28)
at Socket.emit (events.js:311:20)
at Socket.EventEmitter.emit (domain.js:482:12)
at Socket._onTimeout (net.js:478:8)
at listOnTimeout (internal/timers.js:549:17)
at processTimers (internal/timers.js:492:7) {
name: 'MongoNetworkError',
[Symbol(mongoErrorContextSymbol)]: {}
}
使用的预先存在的项目是从https://github.com/radgrad/radgrad2克隆的。我在 radgrad2/app 中添加了一个部署目录。在部署目录中,有以下文件:
Dockerfile
FROM gcr.io/google_appengine/nodejs
RUN install_node {{ nodeVersion }}
RUN npm install npm@{{ npmVersion }}
RUN node -v
RUN npm -v
COPY . /app/
RUN (cd programs/server && npm install --unsafe-perm)
CMD node main.js
应用程序.yml
runtime: custom
service: default
env: flex
threadsafe: true
zones:
- us-west3-b
- us-west3-c
resources:
cpu: 1
memory_gb: 1
disk_size_gb: 20
network:
session_affinity: true
automatic_scaling:
max_num_instances: 2
skip_files:
- ^(.*/)?\.dockerignore$
- ^(.*/)?\yarn-error.log$
- ^(.*/)?\.git$
- ^(.*/)?\.hg$
- ^(.*/)?\.svn$
设置.json
{
"public": {},
"private": {},
"meteor-google-cloud": {
"project": "radgrad2test",
"stop-previous-version": "",
"env_variables": {
"MONGO_URL": "mongodb://user:pw@bla.com",
"ROOT_URL": "https://example.de"
}
}
}
请注意,我在 Windows 10 Home 上使用 WSL 2 和 Docker Desktop 运行它。
什么可能导致应用程序容器崩溃?我该如何解决这个问题,或者我应该在哪里寻找这个问题的根源?
解决方案
MongoNetworkError:无法连接到服务器
这是最近在最新 Meteor 版本中修复的错误:
在一些 MongoDB 主机提供商(如 ScaleGrid 和 IBM Cloud)中,一些开发人员因为证书而收到此错误
MongoNetworkError:第一次连接时无法连接到服务器 [sg-meteorappdb-32194.servers.mongodirector.com:27017] [错误:自签名证书
所以为了解决这个问题,现在可以通过 Meteorsettings.json
文件配置 Mongo 选项。它现在被添加到文档中:
"packages": {
"mongo": {
"options": {
"tls": true,
"tlsCAFileAsset": "certificate.pem"
}
}
}
推荐阅读
- excel - 如何在vba中只显示年份?
- python - ctype Linux so 库指针类型错误
- javascript - 将函数从 ES6 转换为 vanilla JavaScript 以在 Internet Explorer 中工作的问题
- git - git 拿他们/我们的并成功合并代码
- python - AWS HTTP API - Python 请求与 Dart HTTP 中的相同请求但响应不同
- mongodb - 使用 $elemMatch 和 $or 实现后备逻辑(在投影中)
- javascript - 将 SweetAlert2 集成到 Chrome 扩展程序
- three.js - Three.js 自定义着色器不显示
- html - 我正在尝试将导航栏浮动到页面右侧,但它一直挂在左侧固定位置图像的顶部
- node.js - 升级核心后,由于“未定义 FieldArrayProps”,React/node 应用程序无法启动