#google-cloud-platform #google-compute-engine #google-compute-disk
#google-cloud-platform #google-compute-engine #google-compute-disk
Вопрос:
Я пытаюсь выяснить, как монтирование работает в GCE с программой hello-world. У меня есть существующий образ, и когда я создаю экземпляр виртуальной машины в GCE, я выбираю этот существующий образ. Для команды я ввожу echo
с аргументом "hello world"
. Когда виртуальная машина запускается, я вижу, что это напечатано в журналах, поэтому я знаю, что она работает правильно.
Перед созданием экземпляра виртуальной машины я создал стандартный постоянный диск. При создании виртуальной машины я выбрал «добавить объем». Я указал эти данные для тома:
- Тип тома: диск
- Путь подключения: /hello-world-data
- Имя диска: hello-world-test
- Раздел:
- Режим: чтение / запись
После того, как моя виртуальная машина запущена, и я вижу «hello world» в журналах, я перехожу на страницу экземпляров виртуальной машины и выбираю «SSH» на экземпляре. Это успешно открывает облачный терминал, и я нахожусь в приглашении, которое правильно читается <username>@hello-world-test-instance ~ $
.
Я ls -la
, и я не вижу указанный мной том: /hello-world-data
.
Я подумал, что, возможно, он будет существовать при создании, поэтому я пытаюсь:
cd /
mkdir hello-world-data
Но я получаю эту ошибку:
mkdir: cannot create directory ‘hello-world-data’: Read-only file system
Теперь я в замешательстве. Я создал диск, указал путь подключения и выбрал чтение / запись. Что происходит?
После некоторого изучения я вижу, что этот путь существует:
/mnt/disks/gce-containers-mounts/gce-persistent-disks/hello-world-test
Что это? Никакие документы не сообщили мне об этом глубоком пути с несколькими каталогами. Я смотрю, могу ли я хотя бы что-нибудь записать внутри этого каталога:
$ cd /mnt/disks/gce-containers-mounts/gce-persistent-disks/hello-world-test
$ touch test.txt
touch: cannot touch 'test.txt': Permission denied
Кроме того, я даже не вижу исполняемые файлы, созданные моим Dockerfile, которые должны быть помещены в /bin
каталог.
Итак, я заблудился. Где том? Почему это не по указанному пути подключения? Почему /bin
не содержит исполняемые файлы, созданные Dockerfile?
Спасибо
Комментарии:
1. Какую службу вы используете? Google Compute Engine (и какая ОС), контейнерная ОС Google Compute Engine (COS), Google Container Engine (теперь называется Kubernetes). Не смешивайте несколько проблем в одном вопросе. Вместо этого отправьте более одного вопроса.
2. @JohnHanley Google Compute Engine, как говорится в сообщении. Для ОС с загрузочным диском это то, что используется по умолчанию в GCE. Базовый образ моего контейнера
golang:1.13-alpine
.
Ответ №1:
Ответ заключается в том, что при подключении по SSH к экземпляру виртуальной машины вы подключаетесь к хост-машине, а не непосредственно к контейнеру.
Как только вы окажетесь на хост-компьютере, вы можете войти в контейнер, выполнив docker ps
поиск идентификатора контейнера, затем выполнив docker exec -it <container-id> bash
(если в вашем контейнере установлен bash).