2017-11-17 4 views
1

현재 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

:

그래서 예를 들어, 여기에 모든 상점을 통해 ARGENV 변수를 포함 할 것 같다 꽤 복잡한 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)을 사용하지만 그 중 하나가 작동하지 않는 것 같습니다.

답변

0

Docker 세계와 컨테이너 세계에서 실행되는 것과는 다른 점이 밝혀지기 때문에 다른 사람이이 문제를 가지고 약간 혼란 스럽습니다. 혼란스러워지는 곳입니다.

그래서 당신이 볼 때 ${someVar}와 유닉스 것은 그래서 이것은 올바른 기본적와 유닉스 세계에서 잘 작동하지만 윈도우 세계에서가/PowerShell을 나던 cmd를 보인다 이것을 이해하고 그냥 문자 그대로 취급합니다 $someVar.

Windows 월드에서 cmd/powershell에 환경 변수를 포함시키고 자 할 때 %someVar%을 사용해야합니다.