Образ 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, установленная в значение true, но мой cloudbuild.yml файл не принял это и молча терпел неудачу (раздражает!).

Чтобы решить эту проблему, вам нужно будет использовать флаги --container-stdin и --container-tty в команде create-with-container.

Более подробную информацию можно найти в документации Google https://cloud.google.com/compute/docs/containers/configuring-options-to-run-containers

person Parham    schedule 21.12.2018

У меня аналогичная проблема, причина в которой была установка USER в Dockerfile. Я использовал смену пользователя на «узел», который является пользователем, доступным в официальных изображениях nodejs. Но не работает в облачных контейнерах Google.

FROM node:current-buster-slim
USER node 
person Vikram    schedule 30.01.2021