Образ Docker, развернутый в Google Compute Engine, продолжает перезапускаться
Я создал изображение с помощью Google Cloud Build с помощью Docker Compose. В моем cloudbuild.yml
У меня есть следующие шаги:
- Создайте образ докера, используя docker compose
- Пометить встроенное изображение
- Создать шаблон экземпляра
- Создать группу экземпляров
Теперь возникает проблема каждый раз, когда создается новый экземпляр, созданный контейнер из образа продолжает перезапускаться и фактически никогда не загружается. Несмотря на это, я могу создать образ и запустить его как контейнер на экземпляре, независимом от образа из облачной сборки.
Мне удалось найти некоторые подсказки из журналов:
E1219 19:13:52 7f28dce6d700 api_server.cc:184 Metadata request unsuccessful: Server responded with 'Forbidden' (403): Transport endpoint is not connected
oauth2.cc:289 Getting auth token from metadata server docker
Я также получил некоторую подсказку, запустив в этом примере следующее:
docker -a -i start <container_id>
Выход: Unrecognized input header: 99
cloudbuild.yml
файл выглядит так (я заменил некоторые переменные на ...
):
#cloudbuild.yaml
steps:
- name: 'docker/compose:1.22.0'
args: ['-f', 'docker/docker-compose.tb.prod.yml', 'up', '-d']
- name: 'gcr.io/cloud-builders/docker'
args: ['tag', 'tb:latest', '...']
- name: 'gcr.io/cloud-builders/gcloud'
args: [
'beta', 'compute', '--project=...', 'instance-templates', 'create-with-container',
'tb-app-staging-${COMMIT_SHA}',
'--machine-type=n1-standard-2', '--network=...', '--network-tier=PREMIUM', '--metadata=google-logging-enabled=true',
'--maintenance-policy=MIGRATE', '--service-account=...',
'--scopes=https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/devstorage.read_only,https://www.googleapis.com/auth/logging.write,https://www.googleapis.com/auth/monitoring.write,https://www.googleapis.com/auth/servicecontrol,https://www.googleapis.com/auth/service.management.readonly,https://www.googleapis.com/auth/trace.append',
'--tags=http-server,https-server', '--image=cos-stable-69-10895-62-0', '--image-project=cos-cloud', '--boot-disk-size=20GB', '--boot-disk-type=pd-standard',
'--container-restart-policy=always', '--labels=container-vm=cos-stable-69-10895-62-0',
'--boot-disk-device-name=...',
'--container-image=...',
]
- name: 'gcr.io/cloud-builders/gcloud'
args: [
'beta', 'compute', '--project=...', 'instance-groups',
'managed', 'rolling-action', 'start-update',
'tb-app-staging',
'--version',
'template=...',
'--zone=europe-west1-b',
'--max-surge=20',
'--max-unavailable=9999'
]
images: ['...']
timeout: 1200s
2 ответа
Я нашел проблему, и я отвечу на этот вопрос сам, только если кто-то еще сталкивается с той же самой проблемой.
Проблема заключалась в том, что в моем docker-compose.yml
У меня есть конфигурация для stdin_open
а также tty
установить на истину, но мой cloudbuild.yml
файл не принял его и молча терпел неудачу (раздражает!).
Чтобы решить эту проблему, вам нужно будет использовать флаги --container-stdin
а также --container-tty
на create-with-container
команда.
Более подробную информацию можно найти в документах Google https://cloud.google.com/compute/docs/containers/configuring-options-to-run-containers
У меня похожая проблема, причиной была установка USER в Dockerfile. Я использовал изменение пользователя на «узел», который доступен пользователю в официальных изображениях nodejs. Но не работает в облачных контейнерах Google.
FROM node:current-buster-slim
USER node