Ich benutze derzeit Docker für Windows und versuche herauszufinden, wie man String-Interpolation in Teilen meiner Dockerfile tun.Dockerfile String Interpolationsverhalten
So zum Beispiel, hier ist eine ziemlich komplexe dockerfile die ARG
und ENV
Variablen im ganzen Shop einbinden scheint:
https://github.com/Microsoft/docker/blob/master/Dockerfile
Also, wenn Sie bei line 40 suchen
# allow replacing httpredir mirror
ARG APT_MIRROR=httpredir.debian.org
RUN sed -i s/httpredir.debian.org/$APT_MIRROR/g /etc/apt/sources.list
oder sogar 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
Sie werden sehen, dass sie diese env/arg-Variablen in verschiedene RUN
Befehle von $MyVarName
oder ${MyVarName}
setzen, von denen ich annehme, dass sie für sie arbeiten müssen. Aber wenn ich versuche, so etwas zu tun, explodiert es auf mir und ich bin schwer zu finden, viele Informationen darüber, wie das alles funktionieren sollte, und auch wenn dies möglicherweise ein Problem mit mir Docker in Windows (tatsächlich mit Windows-basierten Containern) zu) vs Verwendung von Docker in Linux.
So, hier ist ein Beispiel, das ich habe:
FROM some/image
ENV Version 0.1.0
RUN curl -L -o c:/some-output-dir http://some-url/downloads/file-$Version.zip
Ich habe auch versucht ${Version}
verwenden, die gut entweder scheinen nicht funktioniert, also entweder mir jemand auf einen prägnanten Punkt „hier, wie Sie String-Interpolation tun in dockerfiles "oder schult mich schnell darüber, was hier schief läuft und warum es scheint, die Variable nicht richtig aufzulösen, da ich weiß, dass es eine Datei unter http://some-url/downloads/file-0.1.0.zip
gibt.
Ich habe auch versucht mit Array-Notation Stil läuft zB RUN ["curl", "-L", ...]
aber das schien nicht zu ändern, aber mein Beispiel scheint ziemlich im Einklang mit wie andere Docker-Dateien sind, und sie arbeiten ... Ich habe es sogar versucht mit $(Version)
aber das scheint auch nicht zu funktionieren.