使用gcsfuse在docker容器中装载google云存储桶

使用gcsfuse在docker容器中装载google云存储桶,docker,fuse,gcsfuse,Docker,Fuse,Gcsfuse,我正在尝试从docker容器中装入google cloud bucket,并出现以下错误: [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... d

我正在尝试从docker容器中装入google cloud bucket,并出现以下错误:

[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基础映像上运行的

根映像与非根映像在这里是一个模糊的概念;所涉及的凭证是地面军事系统凭证


有关将GCS凭证交给gcsfuse的文档,请参阅。最简单的方法是使用您最初配置GCE VM时使用的凭据(假设您在GCE上运行),这使得运行gcsfuse通常不需要任何进一步的工作。但是如果这不起作用,您可以使用标志>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>。我必须使用
--priviledge
选项运行docker。(感谢thaJeztah提供的面包屑!)

您确实希望避免使用
--privileged
选项运行容器。 我相信您只需要添加系统管理功能并访问
/dev/fuse
设备

docker run \
    --rm -it \
    --cap-add SYS_ADMIN \
    --device /dev/fuse \
    ubuntu

可能是个愚蠢的问题,但您是否也将凭据文件添加到容器中?您是如何启动容器的,它是否具有运行fuse的权限?注意,这里还有一个卷插件;是的,凭证文件肯定位于主机的/src目录中。我是这样启动容器的:
docker run-p 3000:3000 \-e谷歌应用程序凭据=/src/gcloud\u服务\u account.json \-name gcsfuseTest\path/to/image
将查看插件。我计划在谷歌容器引擎上运行这个。谢谢你的回复。谢谢你的回复。我计划在Google容器引擎中运行这个,但我正在Docker容器中本地测试gcfuse。我已经阅读了您提供的URL上的所有文档,但它在Docker中不起作用。让gcsfuse读入凭据的唯一方法是使用--key文件。导出GOOGLE_应用程序_凭据=/src/gcloud_服务_account.js尚未工作。同样,这些凭证在我的主机笔记本电脑(OSX)上工作。你以前让gcsfuse在Docker内部工作过吗?如果是这样的话,连接命令的闪现将非常有用。再次感谢。我没有特别尝试Docker,也不知道如何配置Docker。但是gcsfuse在这里没有做任何神奇的事情;它只是读取一个环境变量。如果它不起作用,那么导致设置该环境变量(或其设置的值)的任何配置都肯定有问题。在任何情况下,如果可以的话,你能使用
--key file
吗?我最终能够挂载,但在读取或写入目录“Input/output error”时遇到了一个新问题。有关更多详细信息,请参阅更新的问题。谢谢你的帮助,太好了!您是否介意为新问题打开一个新问题(使用
--foreground
运行以获取该问题的更多调试信息),并在此处提交您解决问题的方式作为答案,并将其标记为已接受?感谢您的建议。关闭了这一个,并在这里添加了一个后续问题:你有git回购吗?我能够在docker中运行gcsfuse,但无法与其他映像共享:(我无法通过build命令运行此命令。在构建映像时是否有解决方法?我正在尝试将容器推送到google cloud进行复制