【问题标题】:Issue regarding the deployment of a Meteor Application on Google Cloud App Engine: APP_CONTAINER_CRASHED有关在 Google Cloud App Engine 上部署 Meteor 应用程序的问题:APP_CONTAINER_CRASHED
【发布时间】:2020-10-05 10:58:54
【问题描述】:

TL;DR

克隆这个: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

要部署,在应用目录中:

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 中添加了一个部署目录。在 deploy 目录中,有这些文件:

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

app.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$

settings.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 运行它。

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

【问题讨论】:

    标签: docker meteor google-cloud-platform


    【解决方案1】:

    MongoNetworkError: 连接服务器失败

    这是一个在最新 Meteor 版本中有 just recently being fixed 的错误:

    在一些 MongoDB 主机提供商(如 ScaleGrid 和 IBM Cloud)中,一些开发人员因为证书而收到此错误

    MongoNetworkError:第一次连接时无法连接到服务器 [sg-meteorappdb-32194.servers.mongodirector.com:27017] [错误:自签名证书

    所以为了解决这个问题,现在可以通过 Meteor settings.json 文件配置 Mongo 选项。现在是added to the documentation:

    "packages": {
      "mongo": {
        "options": {
          "tls": true,
          "tlsCAFileAsset": "certificate.pem"
        }
      }
    }
    

    【讨论】:

    • 感谢您的建议。我将上述内容添加到 settings.json 文件中,但不幸的是它无法识别“certificate.pem”。见下文。
    • 请阅读链接文档,了解如何设置 pem 文件的正确路径
    • 我很抱歉。我无法解决它。我已经转向了一些不同的东西。我认为你的答案是正确的方向。感谢您的意见。
    【解决方案2】:

    感谢您的建议。我将上述内容添加到settings.json 文件中,不幸的是它无法识别“certificate.pem”

    ERROR: (gcloud.app.deploy) Error Response: [9]
    Application startup error! Code: APP_CONTAINER_CRASHED
    /app/programs/server/node_modules/fibers/future.js:280
                                                    throw(ex);
                                                    ^
    
    Error: ENOENT: no such file or directory, open '/app/programs/server/assets/app/certificate.pem'
        at Object.openSync (fs.js:457:3)
        at Object.readFileSync (fs.js:359:35)
        at /app/programs/server/npm/node_modules/meteor/npm-mongo/node_modules/mongodb/lib/operations/connect.js:243:32
        at Array.forEach (<anonymous>)
        at resolveTLSOptions (/app/programs/server/npm/node_modules/meteor/npm-mongo/node_modules/mongodb/lib/operations/connect.js:241:34)
        at /app/programs/server/npm/node_modules/meteor/npm-mongo/node_modules/mongodb/lib/operations/connect.js:294:5
        at parseConnectionString (/app/programs/server/npm/node_modules/meteor/npm-mongo/node_modules/mongodb/lib/core/uri_parser.js:685:3)
        at connect (/app/programs/server/npm/node_modules/meteor/npm-mongo/node_modules/mongodb/lib/operations/connect.js:272:3)
        at /app/programs/server/npm/node_modules/meteor/npm-mongo/node_modules/mongodb/lib/mongo_client.js:215:5
        at maybePromise (/app/programs/server/npm/node_modules/meteor/npm-mongo/node_modules/mongodb/lib/utils.js:719:3)
        at MongoClient.connect (/app/programs/server/npm/node_modules/meteor/npm-mongo/node_modules/mongodb/lib/mongo_client.js:211:10)
        at Function.MongoClient.connect (/app/programs/server/npm/node_modules/meteor/npm-mongo/node_modules/mongodb/lib/mongo_client.js:421:22)
        at new MongoConnection (packages/mongo/mongo_driver.js:206:11)
        at new MongoInternals.RemoteCollectionDriver (packages/mongo/remote_collection_driver.js:4:16)
        at Object.<anonymous> (packages/mongo/remote_collection_driver.js:38:10)
        at Object.defaultRemoteCollectionDriver (packages/underscore.js:784:19) {
      errno: -2,
      syscall: 'open',
      code: 'ENOENT',
      path: '/app/programs/server/assets/app/certificate.pem'
    }
    

    我可以做些什么来解决这个问题?我确保我安装了最新版本的流星。

    允许无效证书也不起作用。如果我允许无效证书,我会遇到同样的MongoNetworkError: failed to connect to server [bla.com:27017] on first connect [MongoNetworkError: connection timed out 问题。

    【讨论】:

      猜你喜欢
      • 2020-11-24
      • 2014-01-20
      • 2023-04-09
      • 2021-07-10
      • 1970-01-01
      • 2020-02-12
      • 2019-04-22
      • 2014-04-08
      • 2020-01-22
      相关资源
      最近更新 更多