【问题标题】:Cannot run executable shell script on Google Container-Optimized OS无法在 Google Container-Optimized OS 上运行可执行的 shell 脚本
【发布时间】:2021-01-07 21:44:45
【问题描述】:

在任何其他 linux 发行版上,我都可以使用 shebang 创建一个文件并像这样运行 shell 脚本:

$ chmod +x test.sh
$ ./test.sh Johnny
hello Johnny

但在 Google Cloud Platform Container-Optimized OS 上,我收到 -bash: ./test.sh: Permission denied

如果我以 sh 为前缀,例如sh test.sh Johnny 它会起作用的。我怎样才能让它正常工作?

$ cat test.sh
#!/usr/bin/env sh

echo "Hello $@"

matt@rancher-4mmm /tmp/matt $ chmod +x test.sh 
matt@rancher-4mmm /tmp/matt $ sh ./test.sh matt
Hello matt

matt@rancher-4mmm /tmp/matt $ ./test.sh matt
-bash: ./test.sh: Permission denied
matt@rancher-4mmm /tmp/matt $ ls -la
total 4
drwxr-xr-x  2 matt matt  60 Feb 28 20:00 .
drwxrwxrwt 14 root root 280 Feb 28 19:59 ..
-rwxr-xr-x  1 matt matt  35 Feb 28 20:00 test.sh

【问题讨论】:

    标签: google-cloud-platform google-container-os


    【解决方案1】:

    COS 节点上的大多数文件系统都挂载了“noexec”标志,因此您无法从它们执行二进制文件。

    一些解决方法:

    • 对于脚本,使用脚本作为参数调用解释器,“bash /path/script.sh”、“python /path/app.py”
    • 在 /mnt/disks 下安装额外的数据磁盘。您可以在没有“noexec”标志的情况下安装它。使用启动脚本在启动时挂载。

    【讨论】:

      【解决方案2】:

      Container-Optimized OS 使用“noexec”标志挂载文件系统,除了“在可写位置中,只有 /var/lib/docker 和 /var/lib/cloud 被挂载为“可执行”(即没有 noexec 挂载)旗帜)。” [1]。您可以使用以下命令进行验证:

      mount | grep noexec
      

      有关Container-Optimized OS (COS) 文件系统布局的更多信息,请参阅documentation。 'noexec' 选项不允许在已挂载的文件系统上直接执行任何二进制文件。这是因为 COS 上默认实现了安全锁定。

      【讨论】:

      • 真的很烂_)
      【解决方案3】:

      如果您想一次性运行二进制文件并且不想处理另一个 PD,您也可以只挂载一个 tmpfs 设备并从那里运行它。

      sudo mkdir /mnt/disks/scratch
      sudo mount -t tmpfs tmpfs /mnt/disks/scratch/
      

      【讨论】:

      • 如何在启动脚本中安装 nvidia 驱动程序和 docker run ?当我尝试使用 gpu 启动 docker 时,启动脚本对我不起作用。
      【解决方案4】:

      一种解决方案是使用另一个图像系列,例如ubuntu.

      那里,/tmp/ 没有与noexec 一起挂载。

      【讨论】:

        猜你喜欢
        • 2020-12-14
        • 2018-08-06
        • 1970-01-01
        • 2021-12-24
        • 2021-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-27
        相关资源
        最近更新 更多