使用 golang:alpine Docker 镜像构建的挂载时出现“没有这样的文件或目录”

使用 golang:alpine Docker 镜像构建的挂载时出现“没有这样的文件或目录”

我创建了一个LinuxServer.io 的 docker-transmission 镜像,增加对Google云端存储的支持。

我用的是Ernest (chiaen) 的 docker-gcsfuse项目构建gcsfuse,即提取他的Dockerfile并添加到我自己的一个.gcsfuse 是使用golang:alpine图像构建的。

镜像构建成功(包括gcsfuse;Dockerfile 指示只需将 gcsfuse 复制到/usr/local/bin,我检查了可执行文件位置;此外,/dev/fuse 已从主机端正确公开)。但是,gcsfuse拒绝挂载,并且日志输出Mount: stat /donwloads: no such file or directory,如果目录/downloads确实存在,并且已经设置了正确的权限(设置在/etc/con-init.d/20-config)。我甚至尝试从 shell 中运行,但仍然失败。

为了使 gcsfuse 在我的(Alpine)Docker 镜像中工作,是否缺少包或参数?

如果您想要复制,您可以按照我的 repo 中 README.md 中的说明制作您自己的图像本地副本(您需要将您的 json 密钥上传到 VM)(amitie10g/docker-transmission也可以在 Docker Hub 上找到)。

日志可用这里

使用的虚拟机映像:

  • 开发:Ubuntu 18.04
  • 目标:容器优化操作系统 75-12105.40.0 beta

用于构建的Docker镜像:

  • lsiobase/alpine:3.9
  • golang:高山

提前致谢。

答案1

我通过构建mount.gcsfuse助手并填充/etc/fstab文件来解决这个问题/etc/cont-init.d/20.config

echo "$BUCKET /downloads gcsfuse rw,user,noauto,key_file=/config/gcsfuse-key.json" >> /etc/fstab

然后运行mount.gcsfuse

s6-setuidgid abc mount.gcsfuse $BUCKET /downloads

相关内容