현재 Windows 용 도커를 사용하고 있으며 dockerfile 부분에서 문자열 보간 작업을 수행하려고합니다. 그래서 당신은 line 40Dockerfile 문자열 보간 동작
# allow replacing httpredir mirror
ARG APT_MIRROR=httpredir.debian.org
RUN sed -i s/httpredir.debian.org/$APT_MIRROR/g /etc/apt/sources.list
또는를 보면
https://github.com/Microsoft/docker/blob/master/Dockerfile
:
그래서 예를 들어, 여기에 모든 상점을 통해 ARG
및 ENV
변수를 포함 할 것 같다 꽤 복잡한 dockerfile입니다 심지어 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
또는 ${MyVarName}
의 env/arg 변수를 넣고있는 것을 볼 수 있습니다. 그러나 내가 이와 같은 것을하려고하면, 그것은 나에게 불어 닥친다. 그리고 나는 이것 모두가 어떻게 작동해야하는지에 대한 많은 정보를 찾는데 고심하고있다. 그리고 이것이 창문에 도커를 달고있는 문제 일 가능성이있다면 (실제로 윈도우 기반 컨테이너를 사용한다. 너무) 리눅스에서 도커를 사용하는 대. 그래서 여기
내가 가진 예는 다음과 같습니다
FROM some/image
ENV Version 0.1.0
RUN curl -L -o c:/some-output-dir http://some-url/downloads/file-$Version.zip
나는 또한 하나 잘 작동하는 것 나던 ${Version}
를 사용하여 시도, 그래서 사람이 간결 날 지점 수 있습니다 "여기에 당신이 문자열 보간을 수행하는 방법이다 in dockerfiles "또는 빨리 학교 날 여기에 무슨 일이 일어나고 왜 올바르게 변수를 해결하지 않는 것 같습니다, 내가 거기에 파일이 있다는 것을 알고 http://some-url/downloads/file-0.1.0.zip
.
나는 또한 RUN ["curl", "-L", ...]
을 실행하는 배열 표기법 스타일을 사용해 보았지만 아무 것도 바뀌지는 않지만 내 예제는 다른 도커 파일이있는 방식과 거의 비슷하게 보인다 ... 나는 심지어 시도했다. $(Version)
을 사용하지만 그 중 하나가 작동하지 않는 것 같습니다.