используйте gcsfuse для монтирования ведер облачного хранилища Google в контейнер докеров

Я пытаюсь смонтировать облачное ведро Google из контейнера докеров и получаю следующую ошибку:

[root@cdbdc9ccee5b workdir]# gcsfuse -o allow_other  --debug_gcs --key-file=/src/gcloud_service_account.json my-bucket-name /gcloud
Using mount point: /gcloud
Opening GCS connection...
Opening bucket...
daemonize.Run: readFromProcess: sub-process: mountWithArgs: mountWithConn:     setUpBucket: OpenBucket: Bad credentials for bucket "my-bucket". Check the bucket name and your credentials.

Мои учетные данные работают на моем хост-компьютере, но не в работающем контейнере. API говорит не использовать root для подключения, но вы можете переопределить это с помощью флага -o allow_other (флаг предохранителя). Любые идеи приветствуются.

Это работает на базовом образе centos7


person Marshall    schedule 13.01.2016    source источник
comment
наверное глупый вопрос, а вы еще и файл с учетными данными добавляли в контейнер? Как вы запустили контейнер, есть ли у него права на запуск fuse? Обратите внимание, что здесь также есть плагин громкости; github.com/coduno/docker-volume-gcs   -  person thaJeztah    schedule 13.01.2016
comment
Да, файл учетных данных определенно находится на хосте в каталоге / src. Я запустил контейнер так: docker run -p 3000:3000 \ -e GOOGLE_APPLICATION_CREDENTIALS=/src/gcloud_service_account.json \ --name gcsfuseTest \ path/to/image Посмотрим на плагин. Однако я планирую запустить это на Google Container Engine. Спасибо за ваш ответ.   -  person Marshall    schedule 13.01.2016


Ответы (3)


Корень вместо не - отвлекающий маневр; учетные данные, о которых идет речь, являются учетными данными GCS.

Документацию по передаче учетных данных GCS в gcsfuse см. здесь. Самый простой способ сделать это - использовать учетные данные, с которыми вы изначально настроили свою виртуальную машину GCE (при условии, что вы работаете на GCE), что обычно позволяет запускать gcsfuse без каких-либо дополнительных усилий. Но если это не сработает, вы можете использовать флаг --key-file, чтобы указать gcsfuse путь к файлу ключа JSON, который вы загружаете из Google Developers Console.

person jacobsa    schedule 13.01.2016
comment
Спасибо за ваш ответ. Я планирую запустить это в Google Container Engine, но тестирую gcfuse локально в контейнере Docker. Я прочитал всю документацию по указанному вами URL, но в Docker она не работает. Единственный способ заставить gcsfuse читать мои учетные данные - это --key-file. экспорт GOOGLE_APPLICATION_CREDENTIALS = / src / gcloud_service_account.js еще не работал. Опять же, эти учетные данные работают на моем главном ноутбуке (OSX). У вас раньше был gcsfuse для работы в Docker? Если это так, было бы полезно взглянуть на команды подключения. Спасибо еще раз. - person Marshall; 13.01.2016
comment
В частности, я не пробовал Docker и ничего не знаю о настройке Docker. Но gcsfuse здесь не делает ничего волшебного; он просто читает переменную окружения. Если он не работает, должно быть, что-то не так с той конфигурацией, которая заставляет эту переменную среды быть установленной (или со значением, которое она установлена). В любом случае, можете ли вы просто использовать --key-file, если это сработает? - person jacobsa; 14.01.2016
comment
Наконец, я смог смонтировать, но у меня возникла новая проблема с чтением или записью в каталог Ошибка ввода / вывода. См. Обновленный вопрос для более подробной информации. Спасибо за вашу помощь. - person Marshall; 14.01.2016
comment
Большой! Не возражаете ли вы вместо этого открыть новый вопрос для новой проблемы (запустите с --foreground, чтобы получить дополнительную информацию об отладке для этой проблемы) и представить способ решения этой проблемы в качестве ответа здесь и пометить его как принятый? - person jacobsa; 14.01.2016
comment
Спасибо за совет jacobsa. Закрыл это и добавил здесь продолжение: stackoverflow.com/questions/34779921/ - person Marshall; 14.01.2016

Обновление: мне удалось установить gcsfuse. Пришлось запустить докер с опцией --priviledged. (спасибо #thaJeztah за хлебные крошки!)

person Marshall    schedule 14.01.2016
comment
у вас есть репозиторий git с этим? Мне удалось запустить gcsfuse в докере, но я не могу поделиться им с другими изображениями :( - person ; 18.11.2016
comment
Я не могу запустить это с помощью команды сборки. Есть ли обходной путь при создании изображения? Я пытаюсь отправить контейнер в облако Google для репликации - person gazzwi86; 17.01.2017

Вы действительно хотите избежать запуска контейнеров, используя параметр --privileged. Я считаю, что вам нужно только добавить возможность SYS_ADMIN и доступ к /dev/fuse устройству.

docker run \
    --rm -it \
    --cap-add SYS_ADMIN \
    --device /dev/fuse \
    ubuntu
person TomDotTom    schedule 20.02.2019