对于在 dockerfile 中失败但在容器上的交互式 bash 中工作的脚本的管道答案(是/否)可能是什么原因

对于在 dockerfile 中失败但在容器上的交互式 bash 中工作的脚本的管道答案(是/否)可能是什么原因

在尝试设置 docker 容器时,我偶然发现了一些我不知道如何解决、理解或谷歌的东西。

我有一个运行脚本的 Dockerfile。 Dockerfile 的一层是:

RUN cd /app/spinnaker-1.23.0.27-amd64 && \
    printf 'y\nn\n' | sh install_spinnaker.sh

基本上我复制了该行一些 GitHub 存储库

当我尝试用docker build --tag=app .它构建这个 Dockerfile 时,它​​将运行install_spinnaker.sh到最后,但随后崩溃:

[Y/n] $ The command '/bin/sh -c cd /app/spinnaker-1.23.0.27-amd64 &&     printf 'y\nn\n' | sh install_spinnaker.sh' returned a non-zero code: 1

另一方面,当从 Dockerfile 中删除此行时,构建它,然后在容器上使用 和docker run -ti app bash在容器内打开 bash,然后运行相同的命令,即

cd /app/spinnaker-1.23.0.27-amd64 && printf 'y\nn\n' | sh install_spinnaker.sh

它会起作用的。

现在,实际上存在三个 [Y/n] 问题。所以printf 'y\nn\n' | sh install_spinnaker.sh应该不起作用,无论是在 dockerfile 还是在交互式 bash 中我猜?

所以我尝试了几个不同的。以下对我来说似乎是最合理的:

RUN cd /app/spinnaker-1.23.0.27-amd64 && \
    printf 'y\nn\nn\n' | sh install_spinnaker.sh

我希望它能起作用,因为存在三个问题。但它不起作用,我不知道为什么。在构建 Dockerfile 时,它​​在末尾给出以下内容:

Installation complete.
Would you like to register the installed software?
[Y/n] $ error: process ID out of range

Usage:
 ps [options]

 Try 'ps --help <simple|list|output|threads|misc|all>'
  or 'ps --help <s|l|o|t|m|a>'
 for additional help text.

For more details see ps(1).
The command '/bin/sh -c cd /app/spinnaker-1.23.0.27-amd64 &&     printf 'y\nn\nn\n' | sh install_spinnaker.sh' returned a non-zero code: 1

我在这里没有看到我的错误。如果您看到任何明显的情况,请告诉我。

答案1

error: process ID out of range事实证明,在带有 的容器中运行它时,也出现了的错误docker rum -ti bash。我只是不知何故没有看到错误,无论如何安装都是成功的。所以我没有注意到并认为问题出在 Docker 的某个地方,但事实并非如此。

install_spinnaker.sh我设法通过删除不需要的脚本的所有行(包括导致错误的行)来获得我想要的内容。它还删除了一个问题,因此脚本中现在只剩下两个问题。为此,我这样做:

sed -i '50,101d' install_spinnaker.sh`

在运行脚本之前。

在 Dockerfile 中,该层现在如下所示:

RUN cd /app/spinnaker-1.23.0.27-amd64 && \
    sed -i '50,101d' install_spinnaker.sh && \
    printf 'y\nn\n' | sh install_spinnaker.sh

相关内容