gpt4 book ai didi

docker - 该命令返回了一个非零代码 : 127

转载 作者:行者123 更新时间:2023-12-04 20:31:01 26 4
gpt4 key购买 nike

我正在尝试构建以下 Dockerfile,但它在 RUN ocp-indent --help 上一直失败说 ocp-indent: not found The command '/bin/sh -c ocp-indent --help' returned a non-zero code: 127

FROM ocaml/opam

WORKDIR /workdir

RUN opam init --auto-setup
RUN opam install --yes ocp-indent
RUN ocp-indent --help

ENTRYPOINT ["ocp-indent"]
CMD ["--help"]

我通过 docker run -it <image id> bash -il 撞到了在它之前运行的图像并跑 ocp-indent --help它运行良好。不知道为什么它失败了,想法?

最佳答案

这是一个与 PATH 相关的问题和配置文件。当您使用 sh -cbash -c配置文件未加载。但是当你使用 bash -lc这意味着加载配置文件并执行命令。现在您的配置文件可能具有运行此命令所需的路径设置。

编辑-1

所以原始答案的问题是它无法工作。当我们有

ENTRYPOINT ["/bin/bash", "-lc", "ocp-indent"]
CMD ["--help"]

它最终转换为 /bin/bash -lc ocp-indent --help而要让它工作,我们需要 /bin/bash -lc "ocp-indent --help" .这不能通过在入口点中直接使用命令来完成。所以我们需要制作一个新的 entrypoint.sh文件
#!/bin/sh -l
ocp-indent "$@"

确保 chmod +x entrypoint.sh在主机上。并将 Dockerfile 更新到下面
FROM ocaml/opam

WORKDIR /workdir

RUN opam init --auto-setup
RUN opam install --yes ocp-indent
SHELL ["/bin/sh", "-lc"]
COPY entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
CMD ["--help"]

构建并运行后,它的工作原理
$ docker run f76dda33092a
NAME
ocp-indent - Automatic indentation of OCaml source files

SYNOPSIS

原答案

您可以使用以下命令轻松测试两者之间的差异
docker run -it --entrypoint "/bin/sh" <image id> env
docker run -it --entrypoint "/bin/sh -l" <image id> env
docker run -it --entrypoint "/bin/bash" <image id> env
docker run -it --entrypoint "/bin/bash -l" <image id> env

现在要么你 bash 默认有正确的路径,要么只有在你使用 -l 时才会出现。旗帜。在这种情况下,您可以将 docker 镜像的默认 shell 更改为以下
FROM ocaml/opam

WORKDIR /workdir

RUN opam init --auto-setup
RUN opam install --yes ocp-indent
SHELL ["/bin/bash", "-lc"]
RUN ocp-indent --help

ENTRYPOINT ["/bin/bash", "-lc", "ocp-indent"]
CMD ["--help"]

关于docker - 该命令返回了一个非零代码 : 127,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46374737/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com