gpt4 book ai didi

docker - 如何在Docker容器中的CLI之前添加一些内容?

转载 作者:行者123 更新时间:2023-12-02 18:10:27 31 4
gpt4 key购买 nike

我想在传递给docker容器的CLI之前添加一些内容。

我希望它像这样运行:
docker run -it mstools msbuild.exe --version
但是,要使其在内部运行,我需要在msbuild.exe和mono之前加上完整路径,如下所示:
mono /Microsoft.Build.Mono.Debug.14.1.0.0-prerelease/lib/msbuild.exe --version
当我在命令中使用下面的Dockerfile时,得到以下信息:

$ docker run -it mstools msbuild.exe --version
msbuild.exe: 1: msbuild.exe: [/usr/bin/mono,: not found

如果我跳入容器并检查路径:
$ docker run -it --entrypoint=bash mstools
root@eb47008f092e:/# which mono
/usr/bin/mono

我想念什么?

Dockerfile:
FROM centeredge/nuget
ARG VERSION="14.1.0.0-prerelease"
RUN nuget install Microsoft.Build.Mono.Debug -Version $VERSION -Source "https://www.myget.org/F/dotnet-buildtools/"
ENV PATH="/Microsoft.Build.Mono.Debug.$VERSION/lib/:${PATH}"
ENTRYPOINT ['/usr/bin/mono', " /Microsoft.Build.Mono.Debug.$VERSION/lib/$1 $@"]

最佳答案

您得到的错误肯定是由于您在' exec形式中使用单引号"而不是双引号ENTRYPOINT

另外,我认为您提到的"$@"措辞不起作用(因为"$@"需要一些shell来评估它,而在exec形式中却没有隐含/bin/sh -c …的含义)。但是ENTRYPOINT的exec形式绝对是正确的方法。

所以我建议你写这样的东西:

FROM centeredge/nuget
ARG VERSION="14.1.0.0-prerelease"
RUN nuget install Microsoft.Build.Mono.Debug -Version $VERSION -Source "https://www.myget.org/F/dotnet-buildtools/"
ENV PATH="/Microsoft.Build.Mono.Debug.$VERSION/lib/:${PATH}"
COPY entrypoint.sh /usr/src/
RUN chmod a+x /usr/src/entrypoint.sh
ENTRYPOINT ["/usr/src/entrypoint.sh"]

含有 entrypoint.sh的内容:
#!/bin/bash
exec /usr/bin/mono "/Microsoft.Build.Mono.Debug.$VERSION/lib/$1" "$@"

(注意:我目前尚未测试此示例代码,因此,如果发现一些错字,请发表评论)

关于docker - 如何在Docker容器中的CLI之前添加一些内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57997559/

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