В вычислительном ядре подключение моего тома недоступно по указанному пути подключения

#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).