Ошибка тайм-аута при попытке создать управляемую виртуальную машину Google
Я пытаюсь создать управляемую виртуальную машину для своего приложения узла 4, используя пользовательскую среду выполнения Google.
Я создал следующий 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
Кажется, что докер строится правильно, но в конце процесса я получаю это сообщение:
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.
1 ответ
У меня сейчас работает мое развертывание. Мне приходилось устранять ту же проблему раньше, для другого проекта, но у меня не было кода под рукой, поэтому мне пришлось снова работать над проблемами.
Развертывание проходило гладко вплоть до последних шагов, когда обновление модуля истекло бы. Это заставило меня думать, что это было связано с тем, что приложение запускалось на ВМ и не реагировало должным образом, поэтому время ожидания последнего хука истекло.
Вы найдете много информации здесь - https://cloud.google.com/appengine/docs/managed-vms/config. Я проверил следующие вещи:
- ведение журнала - убедитесь, что вы пишете в правильный файл журнала. См. https://cloud.google.com/appengine/docs/managed-vms/custom-runtimes
- убедитесь, что у вас есть файл.dockerignore и вы пропускаете файлы в app.yaml, чтобы вы не просили процесс скопировать ненужные node_modules или файлы журнала
- отключите проверку работоспособности, если вы ее не используете, или убедитесь, что для нее настроены правильные маршруты express.js
- убедитесь, что переменные среды установлены и соответствуют тому, что может использовать GAE. Это был мой последний шаг - GAE позволит вам связываться с портом виртуальной машины на 8080. Мне пришлось пройти через флаг NODE_ENV в моем app.yaml, который велел приложению использовать 8080, а не 3000.
- Поднимите ресурсы экземпляра GAE в app.yaml. Я указал два логических процессора и сделал оперативную память на 2 гигабайта.
Удачи.