2017-11-17 6 views
1

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.

Antwort

0

Incase jemand anderes hat dieses Problem und ist ein wenig verwirrt, wie sich herausstellt, gibt es einen Unterschied zu dem, was in der Docker-Welt und in der Container-Welt ausgeführt wird, wo ich verwirrt wurde.

Also, wenn Sie sehen die ${someVar} und $someVar, die im Grunde ist eine Unix-Sache so dies richtig ist und arbeiten in der Unix-Welt in Ordnung, aber in der Windows-Welt scheint es cmd/Powershell doesnt verstehen und behandelt sie ebenso wörtlich zu nehmen.

Also in der Windows-Welt, wenn Sie wollen, um Umwelt-Vars in Ihre Cmd/Powershell-Sachen einzubetten, müssen Sie %someVar% verwenden und es wird funktionieren.