使用 gcsfuse 挂载时 Docker 文件已存在
Posted
技术标签:
【中文标题】使用 gcsfuse 挂载时 Docker 文件已存在【英文标题】:Docker file already exists when mounting with gcsfuse 【发布时间】:2018-12-11 08:11:43 【问题描述】:所以,我使用gcsfuse --implicit-dirs [bucket] [mount-point]
命令在我的虚拟机上安装了一个 GCS 存储桶。
我使用与 docker 相同的 [mount-point]
来保存我的数据。但是,当我使用 docker-compose up
启动容器时,我收到一条错误消息,提示 mkdir file exists
我在卸载存储桶并使用gcsfuse --implicit-dirs -o allow_others [bucket] [mount-point]
再次安装它后让它工作。但是,我读到使用 -o allow_others
标志是不安全的。
如果不使用此标志,我应该如何使其工作?
【问题讨论】:
如果没有看到您的Dockerfile
,就很难诊断。你介意发布一个链接吗?
【参考方案1】:
根据this link,需要标志-o allow_others。有几篇示例文章here 和here。
Here,他们也使用 -o allow_others 标志。使用相同的挂载点时出现相同的错误,尽管它们没有使用 GCS 存储桶。他们复制了你的问题。挂载时需要传递 -o allow_other 。否则 mount 只能由您当前的用户使用。 Docker 守护进程以 root 身份运行,而不是以普通用户身份运行,因此它无法访问文件。如果您的用户具有挂载权限,则挂载时不需要 Sudo。请参阅this。
【讨论】:
我无法 mkdir 或触摸容器内部,即使我包含了allow_other
标志。
感谢您的回复。您能告诉我您使用了我发布的哪些文件吗?此外,为了重现该问题,您可以让我知道有关您的容器图像的更多详细信息。
我尝试了所有链接,但没有一个有帮助。我有两个 docker 容器,其中一个带有一个简单的 nginx,它将代理流量反向到 php-fpm 7.2.2 映像,该映像本质上是一个 Laravel 应用程序。【参考方案2】:
我尝试做同样的事情,但遇到了很多问题。我写了一个教程,解释了如何从 Docker 容器中端到端地在 GCE 上挂载 GCS 存储桶:
Retrofitting Apps for Cloud Storage with Zero Code Changes【讨论】:
以上是关于使用 gcsfuse 挂载时 Docker 文件已存在的主要内容,如果未能解决你的问题,请参考以下文章