gcsfuse выдает ошибку ввода / вывода при чтении или записи в смонтированный каталог в докере

Я использую gcsfuse в контейнере докеров (базовый образ centos7) и не могу читать или записывать в смонтированный каталог.

Я монтирую каталог с помощью gcsfuse следующим образом:

[root@6c24c3a6cc28 /]# gcsfuse --foreground --key-file=/src/gcloud_service_account.json my-bucket /gcloud/
Using mount point: /gcloud
Opening GCS connection...
Opening bucket...
Mounting file system...
File system has been successfully mounted.

Когда я пытаюсь прочитать или записать в смонтированный каталог, я получаю следующую ошибку:
[root @ 6c24c3a6cc28 /] # ls -la / gcloud / ls: чтение каталога / gcloud /: Всего ошибок ввода / вывода 0

gcsfuse выводит отладочную информацию, говоря:

fuse: 2016/01/14 01: 33: 41.110260 * fuseops.ReadDirOp error: readAllEntries: ReadEntries: ListObjects: Get https://www.googleapis.com/storage/v1/b/my-bucket/o? delimiter =% 2F & projection = full: закрытый ключ должен быть PEM или обычным PKSC1 или PKCS8; ошибка синтаксического анализа: asn1: ошибка структуры: теги не совпадают (16 vs {class: 1 tag: 27 length: 123 isCompound: true}) {optional: false explicit: false application: false defaultValue: tag: stringType: 0 timeType: 0 set: false omitEmpty: false} pkcs1PrivateKey @ 2

Я запускаю докер так: docker run -p 3000: 3000 \
--privileged \ --cap-add SYS_ADMIN \ --device / dev / fuse \ --name gcsfuseTest \ gcsfuseImage

Я не уверен на 100%, что мне дают --cap-add SYS_ADMIN и --device / dev / fuse. Я вставил их на основе других пользователей, которые монтируют с помощью предохранителя на докере.


person Marshall    schedule 14.01.2016    source источник


Ответы (1)


Я смог понять это, включив некоторые отладочные флаги при запуске gcsfuse, например:

gcsfuse --foreground --debug_gcs --debug_http --debug_fuse --debug_invariants --key-file=/src/gcloud_service_account.json dev-my-bucket /gcloud

Это вернуло много информации, а также следующее:

«code»: 403, «message»: «Доступ не настроен. API (JSON API облачного хранилища) не включен для вашего проекта. Используйте консоль разработчика Google для обновления конфигурации».

Я включил этот API в консоли Google Devlopers, затем через пару минут, вуала, он заработал.

person Marshall    schedule 14.01.2016
comment
У меня такая же начальная ошибка, но, к сожалению, нет этого кода. Спасибо, что предоставили мне эту информацию для получения дополнительной отладочной информации! - person lathomas64; 05.04.2017