Используйте gcsfuse для монтирования хранилищ облачного хранилища Google в докер-контейнер
Я пытаюсь смонтировать облако Google Bucket из контейнера Docker и получаю следующую ошибку:
[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 (флаг fuse). Любые идеи приветствуются.
Это работает на базе изображения centos7
2 ответа
Обновление: я смог получить gcsfuse для монтирования. Я должен был запустить докер с --priviledged
вариант. (спасибо #thaJeztah за хлебную крошку!)
Корень против не красная сельдь здесь; рассматриваемые учетные данные являются учетными данными GCS.
Смотрите здесь документацию по передаче учетных данных GCS в gcsfuse. Самый простой способ сделать это - использовать учетные данные, которые вы изначально сконфигурировали для своей виртуальной машины GCE (при условии, что вы работаете на GCE), что делает работу gcsfuse без каких-либо дополнительных усилий. Но если это не сработает, вы можете использовать флаг --key-file
дать gcsfuse путь к файлу ключа JSON, который вы загружаете из консоли разработчиков Google.
Вы действительно хотите избежать запуска контейнеров с помощью --privileged
вариант. Я считаю, что вам нужно только добавить возможность SYS_ADMIN и доступ к /dev/fuse
устройство.
docker run \
--rm -it \
--cap-add SYS_ADMIN \
--device /dev/fuse \
ubuntu