Образ Docker, развернутый в Google Compute Engine, продолжает перезапускаться

Я создал изображение с помощью Google Cloud Build с помощью Docker Compose. В моем cloudbuild.yml У меня есть следующие шаги:

  1. Создайте образ докера, используя docker compose
  2. Пометить встроенное изображение
  3. Создать шаблон экземпляра
  4. Создать группу экземпляров

Теперь возникает проблема каждый раз, когда создается новый экземпляр, созданный контейнер из образа продолжает перезапускаться и фактически никогда не загружается. Несмотря на это, я могу создать образ и запустить его как контейнер на экземпляре, независимом от образа из облачной сборки.

Мне удалось найти некоторые подсказки из журналов:

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