#docker #google-cloud-platform #google-compute-engine
# #docker #google-cloud-platform #google-compute-engine
Вопрос:
Мне нужно, чтобы мое изображение начиналось с этой команды:
docker run -it --rm --security-opt seccomp=./chrome.json <image_id>
Я развертываю его в Google Compute Engine: https://cloud.google.com/compute/docs/containers/deploying-containers
Насколько я понимаю, я не могу указать там аргументы, поэтому Google Cloud запускает его с помощью просто docker run
command .
Как мне передать эти аргументы? Может быть, я могу как-то указать эти аргументы в Dockerfile?
Комментарии:
1. Вы развернули свой экземпляр GCE на основе ОС, оптимизированной для контейнеров? Если да, кажется, что вы можете запустить docker так же, как обычно. Смотрите здесь -> cloud.google.com/container-optimized-os/docs/how-to /…
2. @kallusis369 я развертываю изображения с помощью этой команды: cloud.google.com/sdk/gcloud/reference/beta/compute/instances / … Я не понимаю, как связать это с инструкцией, на которую вы ссылались
Ответ №1:
Когда вы используете эту функцию для развертывания контейнера непосредственно в Compute Engine, вы ограничены определением
- Точка входа
- Аргументы для передачи в точке входа
- Переменные среды
Вот и все, вы не можете добавлять дополнительные / пользовательские параметры.
Одно из решений заключается в том, чтобы вместо использования встроенной функции использовать оптимизированную для контейнеров ОС (COS) в вашем вычислительном ядре и создать сценарий запуска для загрузки и запуска контейнера с нужными аргументами docker
METADATA=http://metadata.google.internal/computeMetadata/v1
SVC_ACCT=$METADATA/instance/service-accounts/default
ACCESS_TOKEN=$(curl -H 'Metadata-Flavor: Google' $SVC_ACCT/token | cut -d'"' -f 4)
docker login -u oauth2accesstoken -p $ACCESS_TOKEN https://gcr.io
docker run … gcr.io/your-project/your-image
В последней строке вы можете настроить параметр run в своем сценарии запуска.
Итак, теперь для обновления вам нужно обновить сценарий запуска и перезагрузить вашу виртуальную машину (или создать новый вычислительный движок с COS и новым сценарием запуска; и удалить предыдущий).
Это вопрос компромисса между удобством встроенной функции и возможностями настройки.
Комментарии:
1. хорошо, все это имеет смысл. Я пытаюсь перейти к сценарию запуска. Я уже
startup-script
много раз использовал метаданные, но не с контейнерами. Но сейчас это просто не работает. Я могу запустить его вручную, он работает абсолютно нормально. Но при запуске экземпляра по какой-то причине в журналах нет никаких следов его запуска. Он присутствует в метаданных экземпляра, начинается с#!/bin/bash
и, конечно же, не содержит ошибок.2. В последней версии Docker мне нужно было изменить 4-ю строку на, чтобы
echo $ACCESS_TOKEN | sudo docker login -u oauth2accesstoken --password-stdin https://gcr.io
это работало. Также убедитесь , что ваша учетная запись службы Compute Engine имеет роль «Просмотр объектов хранилища».