Как мне передать аргументы в docker run в CLI (интерфейс командной строки)?

#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 имеет роль «Просмотр объектов хранилища».