8

我正在尝试使用谷歌自定义运行时为我的节点 4 应用程序创建一个托管虚拟机。

我创建了以下 Dockerfile:

FROM node:4.2.1

ENV PORT 8080

ADD package.json package.json
RUN npm install
ADD . .

CMD [ "npm", "start" ]

连同这个 app.yaml:

# [START runtime]
runtime: custom
vm: true
api_version: 1
# [END runtime]

health_check:
  enable_health_check: false

skip_files:
 - ^(.*/)?#.*#$
 - ^(.*/)?.*~$
 - ^(.*/)?.*\.py[co]$
 - ^(.*/)?.*/RCS/.*$
 - ^(.*/)?\..*$
 - ^(.*/)?.*/node_modules/.*$
 - ^(.*/)?.*\.log$

我使用 gcloud preview 命令部署应用程序:

gcloud preview app deploy app.yaml --promote

似乎 docker 正在正确构建,但在过程结束时我收到此消息:

Copying files to Google Cloud Storage...
Synchronizing files to [gs://staging.my-project-id.appspot.com/].
Updating module [default]...\Deleted [https://www.googleapis.com/compute/v1/projects/my-project-id/zones/us-central1-f/instances/gae-builder-vm-20151030t142257].
Updating module [default]...failed.
ERROR: (gcloud.preview.app.deploy) Error Response: [4] Timed out creating VMs.
4

1 回答 1

2

我的部署现在正在工作。我之前不得不为另一个项目解决同样的问题,但我手头没有代码,所以我不得不再次解决这些问题。

部署运行顺利,直到最后一步,更新模块将超时。这让我觉得这与应用程序在 VM 上启动并且没有正确响应有关,所以最后的钩子会超时。

您会在这里找到很多信息 - https://cloud.google.com/appengine/docs/managed-vms/config。我检查了以下内容:

  • logging - 确保您正在写入正确的日志文件。请参阅https://cloud.google.com/appengine/docs/managed-vms/custom-runtimes#logging
  • 确保您有一个 .dockerignore 文件并且正在跳过 app.yaml 中的文件,因此您不会要求该进程跨不需要的 node_modules 或日志文件进行复制
  • 如果您不使用它,请关闭运行状况检查,或确保为它配置了正确的 express.js 路由
  • 检查您的环境变量是否已设置并与 GAE 可以使用的匹配。这是我的最后一步 - GAE 将让您绑定到 8080 上的 VM 端口。我必须通过我的 app.yaml 中的 NODE_ENV 标志,它告诉应用程序使用 8080 而不是 3000。
  • 在 app.yaml 中提升 GAE 实例的资源。我指定了两个逻辑 CPU 并制作了 ram 2 gig。

祝你好运。

于 2015-11-01T20:47:27.413 回答