我正在尝试使用 gcsfuse 在部署于 GAE 灵活自定义运行时实例中的 docker 容器中挂载 GCS 存储桶。这是 Dockerfile 的一部分:
FROM gcr.io/google-appengine/python
RUN apt-get -y update
RUN apt-get -y install lsb-release
RUN echo "deb http://packages.cloud.google.com/apt gcsfuse-$(lsb_release -cs) main" | tee /etc/apt/sources.list.d/gcsfuse.list
RUN curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
RUN apt-get -y update
RUN apt-get -y install fuse gcsfuse
然后,当我从 docker 容器中运行时,出现错误:
# gcsfuse --key-file=gcs_credentials.json bucket_name /tmp/mount_path
Using mount point: /tmp/mount_path
Opening GCS connection...
Opening bucket...
Mounting file system...
daemonize.Run: readFromProcess: sub-process: mountWithArgs: mountWithConn: Mount: mount: running fusermount: exit status 1
stderr:
fusermount: fuse device not found, try 'modprobe fuse' first
然后根据错误消息的建议我运行:
# modprobe fuse
bash: modprobe: command not found
我在其他一些问题中看到我应该以特权模式运行 docker 容器,但我找不到如何在 GAE 实例中运行容器时执行此操作。还有其他方法吗?
答案1
问题在于安全上下文和权限:
在 Kuberentes 中:
securityContext:
capabilities:
add:
- SYS_ADMIN
privileged: true
在 Docker 中你可以尝试这个问题