我正试图使用谷歌自定义运行时为我的node4应用程序创建一个托管vm。
我创建了以下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预览命令部署应用程序:
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.
我的部署工作正在进行中。我以前曾为另一个项目解决过同样的问题,但我手头没有代码,所以我不得不再次解决这些问题。
部署一直顺利运行到最后一步,更新模块会超时。这让我觉得这是因为应用程序在VM上启动时没有做出适当的响应,所以最后的挂钩会超时。
你会在这里找到很多信息-https://cloud.google.com/appengine/docs/managed-vms/config。我检查了以下内容:
- 日志记录-确保您正在写入正确的日志文件。看见https://cloud.google.com/appengine/docs/managed-vms/custom-runtimes#logging
- 确保您有一个.dokerignore文件,并跳过app.yaml中的文件,这样您就不会要求进程跨不需要的nodemodule或日志文件进行复制
- 如果您没有使用它,请关闭运行状况检查,或者确保为它配置了正确的express.js路由
- 检查您的环境变量是否已设置并匹配GAE可以使用的内容。这是我的最后一步-GAE将允许您绑定到8080上的VM端口。我必须在我的app.yaml中传递一个NODE_ENV标志,它告诉应用程序使用8080而不是3000
- 在app.yaml中提升GAE实例的资源。我指定了两个逻辑CPU,并使ram2变为gig
祝你好运。