Запуск Docker в Google Cloud Instance с данными в gcsfuse-Bucket Bucket - PullRequest
2 голосов
/ 11 апреля 2019

Я пытаюсь запустить контейнер Docker для анализа данных в Google Cloud Bucket.

Мне удалось успешно смонтировать Bucket с помощью gcsfuse, и я проверил, что могу делать такие вещи, как созданиеи удалите файлы внутри Bucket.

Чтобы иметь возможность устанавливать другие программы (и монтировать корзину), я установил Docker (и не использовал опцию, оптимизированную для Docker).Если я запускаю Docker в интерактивном режиме (без монтирования диска), похоже, что он работает нормально.

Однако, если я пытаюсь запустить Docker в интерактивном режиме с подключенным диском (который установлен gcsfuse-mount)Ведро), я получаю сообщение об ошибке:

user@instance:~/bucket-name/subfolder$ docker run -it -v /home/user/bucket-name:/mnt/bucket-name gcr.io/deepvariant-docker/deepvariant
docker: Error response from daemon: error while creating mount source path '/home/user/bucket-name': mkdir /home/user/bucket-name: file exists.

Я надеюсь, что я близок к тому, чтобы это работало: есть ли у кого-нибудь идеи относительно относительно простого исправления этого сообщения об ошибке?

Кстати, я понимаю, что существуют другие способы запуска DeepVariant в Google Cloud, но я пытаюсь сделать вещи максимально похожими на то, что я делаю в AWS (плюс, мне может потребоваться дополнительная диагностика для анализа одного измои файлы).

Большое спасибо за вашу помощь!

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

К вашему сведению, вот как я смонтировал Bucket:

#mount directory: https://github.com/GoogleCloudPlatform/gcsfuse/blob/master/docs/installing.md
export GCSFUSE_REPO=gcsfuse-`lsb_release -c -s`
echo "deb http://packages.cloud.google.com/apt $GCSFUSE_REPO main" | sudo tee /etc/apt/sources.list.d/gcsfuse.list
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
sudo apt-get update
sudo apt-get -y install gcsfuse

#restart and mount directory: https://cloud.google.com/storage/docs/gcs-fuse
#NOTE: please make sure you are in your home directory (I encounter issues if I try to mount from /mnt)
mkdir [bucket-name]
gcsfuse -o allow_other --file-mode 777 --dir-mode 777 [bucket-name] ./[bucket-name]

и вот как я установил Docker:

#install Docker for Debian: https://docs.docker.com/install/linux/docker-ce/debian/
sudo apt-get update
sudo apt-get -y install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg2 \
    software-properties-common
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -

sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/debian \
   $(lsb_release -cs) \
   stable"
sudo apt-get update
sudo apt-get -y --allow-unauthenticated install docker-ce docker-ce-cli containerd.io

#fix Docker sock issue: https://stackoverflow.com/questions/47854463/got-permission-denied-while-trying-to-connect-to-the-docker-daemon-socket-at-uni
sudo usermod -a -G docker [user]
#have to restart after this

Ответы [ 3 ]

0 голосов
/ 16 апреля 2019

Кроме того, это другая проблема, но я заметил, что могу исправить проблему с запуском исполняемых файлов из корзины, изменив команду с gcsfuse [bucket-name] ./[bucket-name] на gcsfuse --file-mode 777 --dir-mode 777 [bucket-name] ./[bucket-name] (и я соответственно изменил код примера)

0 голосов
/ 18 июля 2019

Недавно я заметил, что приведенного выше набора команд больше не достаточно, чтобы иметь функциональный каталог (например, я не могу добавлять или редактировать файлы).

На основе это обсуждение , я подумал, что мне нужно добавить параметр -o allow_other.

Однако, если это все, что я делаю, я получаю следующее сообщение об ошибке

fusermount: option allow_other only allowed if 'user_allow_other' is set in /etc/fuse.conf

Iможет устранить это сообщение об ошибке, если я раскомментирую соответствующую строку в этом файле.Тем не менее, это по-прежнему не устраняет наличие необходимых прав доступа к файлу в смонтированном каталоге.

Итак, я попытался отредактировать свой файл /etc/fstab, добавив следующую запись

[bucket-name] /home/[username]/[bucket-name] gcsfuse rw,allow_other,file_mode=777,dir_mode=777

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

Кроме того, обратите внимание, что это не было проблемой, связанной с Docker. Это было необходимо дляпо сути дела все что угодно в ведре.Кроме того, я на самом деле не решил эту новую проблему.

Например, я по-прежнему не могу создавать файлы с правами root после перехода на суперпользователя с помощью sudo su - (как описано здесь )

0 голосов
/ 13 апреля 2019

Думаю, я нашел хотя бы частичное решение моей проблемы:

Как уже упоминалось в этого урока , вам также нужно запустить gcloud auth configure-docker.

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

Я думаю, что получил странное сообщение, но, возможно, это больше о конкретном контейнере.Итак, я запустил еще один тест:

docker run -it -v /home/user/bucket-name:/mnt/bucket-name cwarden45/dnaseq-dependencies

На этот раз я получил сообщение об ошибке места на диске в экземпляре (чтобы можно было загрузить и запустить контейнер Docker).Итак, я вернулся и создал новый экземпляр с большим локальным жестким диском:

1) В консоли Google Cloud я выбрал «Вычислить экземпляр» и «Экземпляры виртуальной машины»

2) Я нажал «создать экземпляр» (аналогично предыдущему)

3) Я выбрал «изменить» в разделе «загрузочный диск»

4) Я установил размер 300 ГБ вместо 10 ГБ (в настоящее время в направлении внизу справа под "Размер (ГБ)")

Аналогпрежде я выбрал 8 vCPU для «Типа машины», я выбрал «Разрешить полный доступ ко всем облачным API» в разделе «Идентификация и доступ к API» и установил флажки «Разрешить трафик HTTP» и «Разрешить трафик HTTPS»(в разделе «Брандмауэр»).

Я не выбираю «Развернуть образ контейнера на этом экземпляре виртуальной машины», что, как я считаю, позволяет установить Docker с помощью «sudo», чтобы иметь возможностьдля установки gcsfuse.

Я также должен назвать это решение " parital ", потому что это позволяет мне запускать контейнер Dockerуспешно в интерактивном режиме, , но смонтированное ведро выглядит пустым в Docker .

Для другого проекта я заметил, что исполняемые файлы могут работать, если я установлю их на локальный жесткий диск в / opt, нонет, если я попытался установить их на свое ведро (чтобы сэкономить время на установку этих программ каждый раз).В AWS я считаю, что мне нужно было использовать хранилище EFS вместо хранилища S3, чтобы сделать нечто подобное, но я буду продолжать узнавать больше об использовании Google Cloud Bucket для смонтированного хранилища / анализа.

...