Google app engine 在AppEngine灵活环境中安装地面军事系统铲斗
我正在尝试使用gcsfuse在AppEngine Flexible Environment应用程序上安装GCS bucket 我的Dockerfiles包括以下内容:Google app engine 在AppEngine灵活环境中安装地面军事系统铲斗,google-app-engine,fuse,google-app-engine-python,app-engine-flexible,gcsfuse,Google App Engine,Fuse,Google App Engine Python,App Engine Flexible,Gcsfuse,我正在尝试使用gcsfuse在AppEngine Flexible Environment应用程序上安装GCS bucket 我的Dockerfiles包括以下内容: # gscfuse setup RUN echo "deb http://packages.cloud.google.com/apt cloud-sdk-jessie main" | tee /etc/apt/sources.list.d/google-cloud.sdk.list RUN echo "deb http://pac
# gscfuse setup
RUN echo "deb http://packages.cloud.google.com/apt cloud-sdk-jessie main" | tee /etc/apt/sources.list.d/google-cloud.sdk.list
RUN echo "deb http://packages.cloud.google.com/apt gcsfuse-jessie main" | tee /etc/apt/sources.list.d/gcsfuse.list
RUN wget -qO- https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
RUN apt-get update && apt-get install -y --no-install-recommends google-cloud-sdk gcsfuse strace
RUN gcsfuse --implicit-dirs my_bucket my_dir
我大部分都是从你那里拿的。这几乎只是安装gcsfuse的标准方式,另外还有——不建议安装
如果我以这种方式启动应用程序,它不会装入驱动器。这对我来说并不太奇怪,因为它看起来不像是灵活环境的支持特性
这里是令人困惑的部分。如果我运行gcloud app instances ssh”“
,然后运行container\u exec gaeapp/bin/bash
,那么gcsfuse my\u bucket my\u dir
工作正常
但是,如果我运行gcloud app instances ssh”“--container gaeapp
,则gcsfuse my_bucket my_dir
会失败,并出现以下错误:
fusermount: failed to open /dev/fuse: Operation not permitted
这与我在main.py
中将gcsfuse作为子进程运行时遇到的错误相同
基于此,我运行了strace-f
,看到了与该用户完全相同的问题,即EPERM问题
[pid 59] open("/dev/fuse", O_RDWR) = -1 EPERM (Operation not permitted)
无论我以何种方式登录到容器(或者如果我从main.py
运行子进程),我都是root用户。如果我运行export
,那么我确实会看到不同的变量,因此运行的内容有所不同,但其他所有内容在我看来都是一样的
我看到的其他建议包括使用gcsfuse标志-o allow\u Other
和-o allow\u root
。这些都不起作用
如果我试图在无法运行gcsfuse
的登录名上运行umount
,它会说“必须是超级用户才能卸载”
,即使我是root用户
似乎有一些我不理解的安全设置。然而,由于理论上我可以让main.py
触发一个外部程序登录并运行gcsfuse
,似乎应该有一种方法让它工作而不必这样做 RUN命令是关于为dockerfile创建一个新层的,因此您实际上是在图像创建期间运行该命令,而Flex构建系统不喜欢该命令
我不知道为什么在应用程序中进行外壳处理不起作用,您可以尝试在python子流程中进行“sudo”,或者可能通过在dockerfile的入口点添加“gcsfuse setup&&”将其从应用程序代码中推出。RUN命令是关于为dockerfile创建一个新层,因此,您实际上是在图像创建期间运行该命令,而Flex构建系统不喜欢这样
我不确定为什么在应用程序中进行外壳处理不起作用,您可以尝试在python子流程中进行“sudo”,或者可能通过在dockerfile的入口点添加“gcsfuse setup&&”将其从应用程序代码中推出。谢谢Jon。我尝试过这些想法。入口点对我不起作用(运行gcsfuse命令&&gunicorn)。尝试从python子进程调用sudo失败,因为找不到sudo(用户仍然是root用户)。对我来说,最大的谜团是对实例进行sshing,然后运行container_exec(gcsfuse works)与使用--container gaeapp进行sshing(gcsfuse失败)之间的区别。谢谢Jon。我尝试过这些想法。入口点对我不起作用(运行gcsfuse命令&&gunicorn)。尝试从python子进程调用sudo失败,因为找不到sudo(用户仍然是root用户)。对我来说,最大的谜团是对实例进行sshing,然后运行container_exec(gcsfuse works)与使用--container gaeapp进行sshing(gcsfuse失败)之间的区别。