Google app engine 在AppEngine灵活环境中安装地面军事系统铲斗

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

我正在尝试使用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://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失败)之间的区别。