如何在 Google Cloud Run 上运行的 Ubuntu 20.04.3 Docker 容器中启动应用程序或执行终端命令?

如何在 Google Cloud Run 上运行的 Ubuntu 20.04.3 Docker 容器中启动应用程序或执行终端命令?

我正在 Google Cloud Run 上的云中运行 Ubuntu 20.04.3 桌面。当我在本地运行容器映像时,我可以运行任何进程,包括 bash 终端。

但是,在通过 noVNC 连接的 Google Cloud Run 上,我无法启动终端或除 Google Chrome 之外的任何其他进程。因此,我尝试了几种不同的基于浏览器的终端解决方案,这是我发现的:

在 Node.js 中使用 Spawn

使用 Spawn 和反向 shell Node.js Web 服务器,我可以传递终端命令。例如,localhost:xxxx/exec?q=ls,将列出当前工作目录中的文件。我也可以执行命令。

WebSSH2 和 shellinabox

这两种解决方案都使用 SSH 将浏览器客户端连接到 SSH 服务器。我可以登录它,但是当我运行任何命令时,我会得到以下输出:

root@localhost:~# ls

[1] stopped            ls --color=auto
root@localhost:~# ls

正如您所看到的,我什至尝试以 root 身份使用 SSH,但仍然无法运行任何命令,除非我使用 Node.js 的 spawn 方法来执行 shell 命令。

作为上下文,以下是在本地运行 Ubuntu、fluxbox、xvfb 以及使用 noVNC 通过浏览器访问桌面的情况。请注意,在本地,一切正常,我可以ls在我的主文件夹中运行并查看其中有哪些文件:

通过 noVNC 的 Ubuntu 桌面容器映像

这就是我在 Google Cloud Run 中运行相同图像时看到的情况。请注意,该ls命令仅返回stopped [1]

在 Google Cloud Run 上,命令不会执行

这是 Node.js 反向 shell 的样子。这里我们可以看到我可以ls在/usr/bin文件夹下运行。这是我能够浏览文件系统并查看设置了哪些权限并在 Google Cloud Run 中运行的容器上执行命令的唯一方法:

在 Google Cloud Run 上,命令可以通过 Node.js 反向 shell 执行

即使我使用 Node.js 反向代理来放松对文件的权限,chmod -R 777 /usr我仍然无法执行像ls使用 WebSSH2 或 shellinabox 时那样的命令。

是什么可能阻止 shell 命令和进程运行,甚至以 root 身份运行?

相关内容