SSH-подключение к недавно развернутому контейнеру на GCP Compute Engine

SSH-подключение к недавно развернутому контейнеру на GCP Compute Engine

Мне нужно просто подключиться по SSH к контейнеру, развернутому на GCP Compute Engine, не делая лишних телодвижений.

Сначала я создаю вычислительный экземпляр с контейнером:

gcloud compute instances create-with-container instance_name --container-image gcr.io/my-container-path:latest

Затем попробуйте подключиться к нему по ssh:

gcloud compute ssh instance_name --container CONTAINER_NAME

Проблема в том, что CONTAINER_NAME неизвестен.Похоже, нет способа задать имя контейнера при создании экземпляра детерминированным образом. Поэтому после создания экземпляра вам нужно запустить на нем "docker ps", чтобы определить случайное имя, прежде чем вы сможете использовать функциональность SSH.

Это похоже на стандартную схему использования, что я, должно быть, что-то упускаю. Есть ли лучший способ?

решение1

Мне не известна возможность присваивать имена контейнерам при создании экземпляра виртуальной машины.

В качестве решения вы можете запустить команду для вывода списка образов контейнеров. Эта команда будет запущена один раз, чтобы получить имя образа. Поместите ее в скрипт оболочки.

gcloud compute ssh $INSTANCE_NAME \
--project $PROJECT_ID \
--zone $ZONE_NAME \
--ssh-key-file $SSH_PRIVATE_KEY \
--command "docker ps"

Примечание: вы можете настроить CLI так, чтобы не требовалось указывать проект и зону, чтобы упростить команду:

gcloud config set project PROJECT_ID
gcloud config set compute/zone ZONE_NAME

Команду можно упростить еще больше, если экземпляр использует закрытый ключ SSH по умолчанию, который~/.ssh/google_compute_engine.

Это сокращает команду до:

gcloud compute ssh $INSTANCE_NAME --command "docker ps"

решение2

Версия одной команды для подключения к работающему контейнеру:

gcloud compute ssh my-vm --project=my-project  --container=$(gcloud compute ssh my-vm --project=my-project --command 'sudo docker ps --format {{.ID}}')

Связанный контент