gpt4 book ai didi

docker - Dockerfile字符串内插行为

转载 作者:行者123 更新时间:2023-12-02 19:34:27 25 4
gpt4 key购买 nike

我目前正在将docker用于Windows,并试图找出如何在dockerfile的各个部分内进行字符串插值。

因此,例如,这是一个非常复杂的dockerfile,似乎在整个商店中都嵌入了ARGENV变量:

https://github.com/Microsoft/docker/blob/master/Dockerfile

所以,如果你看看line 40

# allow replacing httpredir mirror
ARG APT_MIRROR=httpredir.debian.org
RUN sed -i s/httpredir.debian.org/$APT_MIRROR/g /etc/apt/sources.list

甚至 line 106
# Configure the container for OSX cross compilation
ENV OSX_SDK MacOSX10.11.sdk
ENV OSX_CROSS_COMMIT 8aa9b71a394905e6c5f4b59e2b97b87a004658a4
RUN set -x \
&& export OSXCROSS_PATH="/osxcross" \
&& git clone https://github.com/tpoechtrager/osxcross.git $OSXCROSS_PATH \
&& ( cd $OSXCROSS_PATH && git checkout -q $OSX_CROSS_COMMIT) \
&& curl -sSL https://s3.dockerproject.org/darwin/v2/${OSX_SDK}.tar.xz -o "${OSXCROSS_PATH}/tarballs/${OSX_SDK}.tar.xz" \
&& UNATTENDED=yes OSX_VERSION_MIN=10.6 ${OSXCROSS_PATH}/build.sh
ENV PATH /osxcross/target/bin:$PATH

您将看到它们通过 RUN$MyVarName将这些env / arg变量放入各种 ${MyVarName}命令中,我认为它们必须对它们起作用。但是,如果我尝试做这样的事情,它会让我大吃一惊,并且我正在努力寻找更多有关这一切应该如何工作的信息,并且这是否也是我在Windows中运行docker的问题(实际上是使用基于Windows的容器)也)与在Linux中使用docker。

所以这是我的一个例子:
FROM some/image

ENV Version 0.1.0

RUN curl -L -o c:/some-output-dir http://some-url/downloads/file-$Version.zip

我也尝试过使用似乎效果不佳的 ${Version},所以任何人都可以指出我一个简洁的“这是您在dockerfile中如何进行字符串插值的方法”,或者快速向我学习这里出了什么问题以及为什么它似乎不起作用我知道在 http://some-url/downloads/file-0.1.0.zip上有一个文件,可以正确地解析变量。

我也尝试过使用数组符号样式运行,即 RUN ["curl", "-L", ...],但这似乎并没有改变任何东西,但是我的示例似乎与其他docker文件的方式非常一致,并且它们可以工作...我什至尝试使用 $(Version),但是似乎也不起作用。

最佳答案

万一其他人都有这个问题并且有点困惑,因为事实证明,在Docker世界和Container世界中运行的东西是有区别的,这正是我感到困惑的地方。

因此,当您看到${someVar}$someVar基本上是unix的东西时,这是正确的,并且在Unix世界中可以正常工作,但是在Windows世界中,cmd / powershell似乎不理解这一点,只是将其视为文字。

因此,在Windows世界中,当您要将环境变量嵌入cmd / powershell内容中时,需要使用%someVar%,它将起作用。

关于docker - Dockerfile字符串内插行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47353506/

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