首页 > 解决方案 > 有关在 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 运行它。

什么可能导致应用程序容器崩溃?我该如何解决这个问题,或者我应该在哪里寻找这个问题的根源?

标签: dockermeteorgoogle-cloud-platform

解决方案


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"
    }
  }
}

推荐阅读