Как вызвать gcloud compute instance create-with-container с аргументами точки входа в контейнер - PullRequest
0 голосов
/ 08 января 2020

Я хотел бы создать вычислительный экземпляр на основе контейнера с точкой входа python. Точка входа требует аргументов. Например, если бы я запускал контейнер локально с помощью команды:

docker run ${IMAGE_TAG} \
  --arg0=0 \
  --arg1=1

Какой будет команда gcloud для создания экземпляра, который автоматически запускает точку входа с предоставленными аргументами?

Я попробовал что-то вроде следующего (после нажатия контейнера), но это не удалось. Экземпляр запущен, но не запускается с точки входа.

gcloud compute instances create-with-container \
  ${INSTANCE_NAME} \
  --zone=${ZONE} \
  --machine-type=${INSTANCE_TYPE} \
  --accelerator=${GPU_TYPE} \
  --service-account=default \
  --container-image=${IMAGE_URI} \
  --container-arg="--arg0=0" \
  --container-arg="--arg1=1"

Ответы [ 2 ]

2 голосов
/ 09 января 2020

Я бы спросил, как определяется ваша ENTRYPOINT в вашем Dockerfile. Вы используете форму exe c или shell ?

Я думаю, что вы используете форму exe c, так как при локальном ее запуске вы просто добавляете два аргумента в команду docker run, и они успешно перешел. Я упоминаю это как ENTRYPOINT, определенный в shell форме, не принимает аргументы, передаваемые согласно документам .

Аргументы, передаваемые с использованием --container-arg, должны добавляться после ENTRYPOINT аналогично тому, как когда CMD используется для установки значений по умолчанию для ENTRYPOINT (подробнее см. this ).

Как упоминал Джон Хэнли, строка --arg0=0 будет передана программе, добавленной в Dockerfile ENTRYPOINT, или команде, указанной с помощью --container-command, как в ответе Джона Хэнли.

Я бы предложил проверить, как определяется ENTRYPOINT в Dockerfile, чтобы начать устранение неполадок, которые могут быть причиной этого. Также вы можете проверить запущенные процессы в экземпляре виртуальной машины сразу после создания, чтобы увидеть, как выполнялась точка входа ig $ docker exec -it test ps aux.

1 голос
/ 08 января 2020

Обычно entrypoint указывается в Dockerfile при создании контейнера.

Для переопределения используйте аргументы --container-command и --container-arg.

Передача аргументов к команде ENTRYPOINT контейнера

В вашем Dockerfile вы указываете программу для запуска и ее аргументы, например:

CMD [ "python", "app.py", "arg1", arg2" ]

Чтобы переопределить эти настройки:

gcloud compute instances create-with-container \
  ${INSTANCE_NAME} \
  --zone=${ZONE} \
  --machine-type=${INSTANCE_TYPE} \
  --accelerator=${GPU_TYPE} \
  --service-account=default \
  --container-image=${IMAGE_URI} \
  --containter-command="python"
  --container-arg="app.py" \
  --container-arg="arg1" \
  --container-arg="arg2"

Я не уверен, что вы пытаетесь достичь sh с --arg0=0. Эта строка без изменений будет передана в программу.

...