'source'와 함께 Dockerfile에서 RUN 명령어를 사용할 수 없습니다


274

나는 바닐라 파이썬 환경을 설치하기 위해 함께 모은 Dockerfile을 가지고 있습니다 (나중에 앱을 설치할 것입니다).

FROM ubuntu:12.04

# required to build certain python libraries
RUN apt-get install python-dev -y

# install pip - canonical installation instructions from pip-installer.org
# http://www.pip-installer.org/en/latest/installing.html
ADD https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py /tmp/ez_setup.py
ADD https://raw.github.com/pypa/pip/master/contrib/get-pip.py /tmp/get-pip.py
RUN python /tmp/ez_setup.py
RUN python /tmp/get-pip.py
RUN pip install --upgrade pip 

# install and configure virtualenv
RUN pip install virtualenv 
RUN pip install virtualenvwrapper
ENV WORKON_HOME ~/.virtualenvs
RUN mkdir -p $WORKON_HOME
RUN source /usr/local/bin/virtualenvwrapper.sh

빌드는 마지막 줄까지 정상적으로 실행되며 다음 예외가 발생합니다.

[previous steps 1-9 removed for clarity]
...
Successfully installed virtualenvwrapper virtualenv-clone stevedore
Cleaning up...
 ---> 1fc253a8f860
Step 10 : ENV WORKON_HOME ~/.virtualenvs
 ---> Running in 8b0145d2c80d
 ---> 0f91a5d96013
Step 11 : RUN mkdir -p $WORKON_HOME
 ---> Running in 9d2552712ddf
 ---> 3a87364c7b45
Step 12 : RUN source /usr/local/bin/virtualenvwrapper.sh
 ---> Running in c13a187261ec
/bin/sh: 1: source: not found

만약 내가 ls그 디렉토리에 (바로 이전 단계가 최선을 다하고 있다고 테스트) 나는 파일이 예상대로 존재하는 것을 볼 수있다 :

$ docker run 3a87 ls /usr/local/bin
easy_install
easy_install-2.7
pip
pip-2.7
virtualenv
virtualenv-2.7
virtualenv-clone
virtualenvwrapper.sh
virtualenvwrapper_lazy.sh

source명령을 실행하려고하면 위와 같은 '찾을 수 없음'오류가 발생합니다. 그러나 대화 형 셸 세션을 실행하면 소스가 작동합니다.

$ docker run 3a87 bash
source
bash: line 1: source: filename argument required
source: usage: source filename [arguments]

그때 행복하게 접근을 여기에서 스크립트를 실행 할 수 있습니다 workon, mkvirtualenv

내가 뒷조사를 해봤 그리고 처음에 문제가 사이의 차이에 거짓말을 할 수 것처럼 보였다 bash는 우분투로 로그인 쉘대시 우분투 같은 시스템 쉘 , 대시 지원하지 source명령을 사용합니다.

그러나 이에 대한 대답은 '.' 을 사용하는 것으로 보입니다 . 대신에 sourceDocker 런타임이 go panic 예외와 함께 폭발합니다.

이 문제를 해결하기 위해 Dockerfile RUN 명령에서 쉘 스크립트를 실행하는 가장 좋은 방법은 무엇입니까?


2
따라서 '소스'하지 말고 명령을 실행하십시오. 또는 'bash'로 쉘 스크립트를 실행하십시오.
Alister Bulman

스크립트가 실패하지는 않았지만 다양한 명령에 액세스 할 수 없었습니다. 이 문제는 동일합니다 -github.com/dotcloud/docker/issues/2847
Hugo Rodger-Brown

2
그것에 대해 생각하면 맞습니다. Virtualenvwrapper는 컨테이너 환경에서 의미가 없습니다. 나는 그것을 철회하고 대신 'native'virtualenv를 사용할 것입니다.
Hugo Rodger-Brown

1
이 접근 할 수있는보다 근본적인 방법은 stackoverflow.com/questions/4732200/...
Gaurav Ojha

시도CMD source activate django-py35
Belter

답변:


315

RUN /bin/bash -c "source /usr/local/bin/virtualenvwrapper.sh"


66
뭐라고? 명령에만 존재하는 셸 내에서 스크립트를 소싱하는 경우 작업의 총계가 환경 변수를 설정한다고 가정하면 향후 명령 실행에 영향을 미치지 않습니다. 그렇다면 왜 source그렇 bash /usr/local/bin/virtualenvwrapper.sh습니까?
Charles Duffy

13
RUN /bin/bash -c "source /usr/local/bin/virtualenvwrapper.sh; my_command; my_command; my_command;"
Leo

29
작동하지만 정확하지 않습니다. docs.docker.com/engine/reference/builder/#run을 읽고 두 번째 코드 샘플 이후에 멈추지 마십시오. 바로 다음에 나오는 참고를 읽으십시오 . /bin/sh -c기본 쉘 이기 때문에 RUN의 "쉘 형식"은로 변환됩니다 RUN ["/bin/sh", "-c", "/bin/bash" "-c" "source /usr/local/bin/virtualenvwrapper.sh"]. 당신은 가서 당신이 걸릴 수 있도록 RUN의 "간부 인 형태"를 사용한다 sh그래서처럼RUN ["/bin/bash" "-c" "source /usr/local/bin/virtualenvwrapper.sh"]
브루노 Bronosky

8
이것이 왜 중첩을 생성하고 피해야 하는지 이해 하려면 stackoverflow.com/a/45087082/117471 을 참조하십시오 . bashsh
Bruno Bronosky

4
훨씬 더 좋은 답은 여기에 있습니다 : stackoverflow.com/a/42216046/1663462
크리스 Stryczynski

150

원래 답변

FROM ubuntu:14.04
RUN rm /bin/sh && ln -s /bin/bash /bin/sh

이것은 모든 우분투 도커 기본 이미지에서 작동합니다. 나는 일반적으로 내가 쓰는 모든 Dockerfile에 대해이 줄을 추가합니다.

관련 방관자가 편집

당신이 "사용의 효과를 얻고 싶다면 bash대신 sh하지 않고,이 전체 Dockerfile에 걸쳐"를 변질가능성이 손상 * 용기 내부의 OS를, 당신은 할 수 도커에게 당신의 의도를 말해 . 그것은 다음과 같이 수행됩니다.

SHELL ["/bin/bash", "-c"]

* 가능한 피해는 Linux의 많은 스크립트 (새로운 Ubuntu 설치 grep -rHInE '/bin/sh' /에서 2700 이상의 결과를 반환 함)가에서 POSIX 셸을 완전히 기대한다는 것 /bin/sh입니다. bash 쉘은 POSIX와 추가 내장 기능이 아닙니다. POSIX와 완전히 다르게 작동하는 내장 (및 그 이상)이 있습니다. 나는 POSIX (그리고 다른 쉘에서 테스트하지 않은 스크립트가 당신이 기저귀를 피했다고 생각하기 때문에 작동한다는 오해)를 피하고 bashism을 사용하는 것을 완전히 지원합니다. 그러나 당신은 스크립트에서 적절한 shebang으로 그렇게합니다. 전체 OS에서 POSIX 셸을 잡아 당기는 것이 아닙니다. (리눅스와 함께 제공되는 모든 2700 플러스 스크립트와 설치 한 패키지의 모든 스크립트를 확인할 시간이 없다면)

이 답변에 대한 자세한 내용은 아래를 참조하십시오. https://stackoverflow.com/a/45087082/117471


18
이것은 약간 단순화 될 수있다 :ln -snf /bin/bash /bin/sh
apottere

2
@ user1442219에서이 대체합니다 기본 명령 인터프리터 shbash
Bhargav Nanekalva

27
ln -s /bin/bash /bin/sh이것은 끔찍한 생각입니다. 우분투는 / bin / sh를 대상으로 대시를 지정합니다. dash는 배쉬보다 훨씬 빠릅니다. / bin / sh를 bash에 연결하면 서버 성능이 크게 저하됩니다. 인용 : wiki.ubuntu.com/DashAsBinSh
xero

7
이것은 해킹이 아니며 해결책이 아닙니다. 스크립트가에 의해 실행되는 경우 sh쉘,하지만 당신이 원하는 bash적절한 해결책은 가지고 중 하나입니다 sh프로세스 호출 bash예를 들어, 일회성 등을 bash -c 'source /script.sh && …', 또는 당신도 (같은 피하기 bashisms에 관해서는 지금까지 갈 수 source대신 전체), 및 유효한 POSIX 동등 물 만 사용하도록 선택하십시오 (예 :) . /script.sh. (마음의 공간 후에 .!) 마지막으로, 스크립트가 (단지 sourceable되지 않음) 실행 가능한 경우, 결코 로모그래퍼 스크립트 거짓말을하지 않습니다 #!/bin/sh실제로 SH-호환이 아니라면 말야. #!/bin/bash대신 사용하십시오 .
Mark G.

7
이제 원래 답변을 공감하고 '관심있는 사람'이 편집을 공표하는 방법은 무엇입니까?
Slava

65

RUN명령 의 기본 쉘 은 ["/bin/sh", "-c"]입니다.

RUN "source file"      # translates to: RUN /bin/sh -c "source file"

SHELL instruction을 사용하면 RUNDockerfile에서 후속 명령어에 대한 기본 쉘을 변경할 수 있습니다 .

SHELL ["/bin/bash", "-c"] 

이제 기본 쉘이 변경되었으며 모든 RUN 명령에서 명시 적으로 정의 할 필요가 없습니다.

RUN "source file"    # now translates to: RUN /bin/bash -c "source file"

추가 사항 : --login로그인 쉘을 시작하는 옵션을 추가 할 수도 있습니다 . 즉 ~/.bachrc, 예를 들어 명령을 읽기 전에 명시 적으로 소싱 할 필요가 없습니다.


1
사용에 큰 포인터 --login- 단지 자신이 밖으로을 생각
mattexx

사용하여 SHELL ["/bin/bash", "-c", "-l"] 나는 나를 쉽게 자위대의 명령을 실행 허용의 .bashrc 파일에 추가 업데이트를 사용할 수 있었다.
Rowinson Gallego

46

나는 같은 문제가 있었고 virtualenv 내에서 pip install을 실행하려면이 명령을 사용해야했습니다.

RUN pip install virtualenv virtualenvwrapper
RUN mkdir -p /opt/virtualenvs
ENV WORKON_HOME /opt/virtualenvs
RUN /bin/bash -c "source /usr/local/bin/virtualenvwrapper.sh \
    && mkvirtualenv myapp \
    && workon myapp \
    && pip install -r /mycode/myapp/requirements.txt"

도움이 되길 바랍니다.


ROS 답변에서 온 경우 예, 작동합니다. : 같은 뭔가RUN /bin/bash -c "source /opt/ros/melodic/setup.bash && \ cd /home && \ git clone https://angelos.p:$password@gitlab.com/inno/grpc-comms.git && \ cd grpc-comms && \ mkdir build && \ cd build && \ cmake .. && make"
angelos.p

44

가장 간단한 방법은 소스 대신 도트 연산자를 사용하는 것입니다. 이는 bash source명령 과 동일합니다 .

대신에:

RUN source /usr/local/bin/virtualenvwrapper.sh

사용하다:

RUN . /usr/local/bin/virtualenvwrapper.sh

"source는 Bourne 쉘 내장 및 POSIX`special '내장" -ss64.com/bash/source.html linux.die.net/man/1/sh ... . / source는 파일 이름 뒤에 위치 매개 변수를 허용합니다
Wes Turner

5
각 RUN 명령이 독립적으로 작동하기 때문에 작동하지 않습니다. RUN 명령이 완료되면 source또는 에서 변경 사항 .이 손실됩니다. 다음을 참조하십시오 : stackoverflow.com/a/40045930/19501
amit

26

Docker 1.12 이상을 사용하는 경우 SHELL!

짧은 답변:

일반:

SHELL ["/bin/bash", "-c"] 

파이썬 vituralenv의 경우 :

SHELL ["/bin/bash", "-c", "source /usr/local/bin/virtualenvwrapper.sh"]

긴 답변 :

에서 https://docs.docker.com/engine/reference/builder/#/shell

SHELL ["executable", "parameters"]

SHELL 명령어를 사용하면 셸 형식의 명령에 사용 된 기본 셸을 재정의 할 수 있습니다. Linux의 기본 쉘은 [ "/ bin / sh", "-c"]이고 Windows의 경우 [ "cmd", "/ S", "/ C"]입니다. SHELL 명령어는 Dockerfile에 JSON 형식으로 작성해야합니다.

SHELL 명령어는 cmd와 powershell, sh를 포함하여 사용 가능한 대체 쉘과 같이 일반적으로 사용되는 두 가지 고유 쉘이있는 Windows에서 특히 유용합니다.

SHELL 명령은 여러 번 나타날 수 있습니다. 각 SHELL 명령은 모든 이전 SHELL 명령을 무시하고 모든 후속 명령에 영향을줍니다. 예를 들면 다음과 같습니다.

FROM microsoft/windowsservercore

# Executed as cmd /S /C echo default
RUN echo default

# Executed as cmd /S /C powershell -command Write-Host default
RUN powershell -command Write-Host default

# Executed as powershell -command Write-Host hello
SHELL ["powershell", "-command"]
RUN Write-Host hello

# Executed as cmd /S /C echo hello
SHELL ["cmd", "/S"", "/C"]
RUN echo hello

쉘 명령의 쉘 형식이 Dockerfile에서 사용될 때 SHELL 명령의 영향을받을 수있는 명령은 RUN, CMD 및 ENTRYPOINT입니다.

다음 예제는 SHELL 명령어를 사용하여 간소화 할 수있는 Windows에서 발견되는 일반적인 패턴입니다.

...
RUN powershell -command Execute-MyCmdlet -param1 "c:\foo.txt"
...

docker가 호출 한 명령은 다음과 같습니다.

cmd /S /C powershell -command Execute-MyCmdlet -param1 "c:\foo.txt"

이것은 두 가지 이유로 비효율적입니다. 먼저 불필요한 cmd.exe 명령 프로세서 (일명 셸)가 호출됩니다. 둘째, 쉘 형식의 각 RUN 명령에는 명령 앞에 접두사를 추가로 추가해야합니다.

이를보다 효율적으로 만들기 위해 두 가지 메커니즘 중 하나를 사용할 수 있습니다. 하나는 다음과 같은 JSON 형식의 RUN 명령을 사용하는 것입니다.

...
RUN ["powershell", "-command", "Execute-MyCmdlet", "-param1 \"c:\\foo.txt\""]
...

JSON 형식은 분명하고 불필요한 cmd.exe를 사용하지 않지만 큰 따옴표와 이스케이프를 통해 더 자세한 정보가 필요합니다. 대체 메커니즘은 SHELL 명령어와 셸 형식을 사용하여 Windows 사용자를 위해 특히 이스케이프 파서 지시문과 결합 할 때보다 자연스러운 구문을 만드는 것입니다.

# escape=`

FROM microsoft/nanoserver
SHELL ["powershell","-command"]
RUN New-Item -ItemType Directory C:\Example
ADD Execute-MyCmdlet.ps1 c:\example\
RUN c:\example\Execute-MyCmdlet -sample 'hello world'

를 야기하는:

PS E:\docker\build\shell> docker build -t shell .
Sending build context to Docker daemon 4.096 kB
Step 1/5 : FROM microsoft/nanoserver
 ---> 22738ff49c6d
Step 2/5 : SHELL powershell -command
 ---> Running in 6fcdb6855ae2
 ---> 6331462d4300
Removing intermediate container 6fcdb6855ae2
Step 3/5 : RUN New-Item -ItemType Directory C:\Example
 ---> Running in d0eef8386e97


    Directory: C:\


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       10/28/2016  11:26 AM                Example


 ---> 3f2fbf1395d9
Removing intermediate container d0eef8386e97
Step 4/5 : ADD Execute-MyCmdlet.ps1 c:\example\
 ---> a955b2621c31
Removing intermediate container b825593d39fc
Step 5/5 : RUN c:\example\Execute-MyCmdlet 'hello world'
 ---> Running in be6d8e63fe75
hello world
 ---> 8e559e9bf424
Removing intermediate container be6d8e63fe75
Successfully built 8e559e9bf424
PS E:\docker\build\shell>

SHELL 명령어는 쉘 작동 방식을 수정하는 데에도 사용될 수 있습니다. 예를 들어, Windows에서 SHELL cmd / S / C / V : ON | OFF를 사용하면 지연된 환경 변수 확장 시맨틱을 수정할 수 있습니다.

SHELL 명령어는 zsh, csh, tcsh 등과 같은 대체 쉘이 필요한 경우 Linux에서도 사용할 수 있습니다.

SHELL 기능은 Docker 1.12에 추가되었습니다.


20

이 페이지의 답변을 바탕으로 각 RUN 문이 다른 RUN 문과 독립적으로 실행된다는 것을 알아야합니다. /bin/sh -c 되므로 일반적으로 로그인 쉘에서 제공되는 환경 변수를 얻지 .

지금까지 찾은 가장 좋은 방법은 스크립트를 추가하고 /etc/bash.bashrc각 명령을 bash 로그인으로 호출하는 것입니다.

RUN echo "source /usr/local/bin/virtualenvwrapper.sh" >> /etc/bash.bashrc
RUN /bin/bash --login -c "your command"

예를 들어 virtualenvwrapper를 설치 및 설정하고 가상 환경을 생성하고 bash 로그인을 사용할 때 활성화 한 다음 파이썬 모듈을 다음 환경에 설치할 수 있습니다.

RUN pip install virtualenv virtualenvwrapper
RUN mkdir -p /opt/virtualenvs
ENV WORKON_HOME /opt/virtualenvs
RUN echo "source /usr/local/bin/virtualenvwrapper.sh" >> /etc/bash.bashrc
RUN /bin/bash --login -c "mkvirtualenv myapp"
RUN echo "workon mpyapp" >> /etc/bash.bashrc
RUN /bin/bash --login -c "pip install ..."

bash 시작 파일 에 대한 매뉴얼을 읽으면 소스가 무엇인지 이해하는 데 도움이됩니다.


1
당신의 솔루션을 기반으로 한 멋진 점은 : ADD env-file /etc/profile.d/installerenv.sh RUN /bin/bash --login -c 'env' RUN /bin/bash -c 'rm /etc/profile.d/installerenv.sh' 유스 케이스가 도커 빌드 관점에 더 많은 인젝션 환경 변수를 추가하면 docs.docker.com/compose/yml을 살펴 보는 것이 좋습니다. / # env-file 도 있습니다.
daniel.kahlenberg

1
이것에 대한 문제는 각 RUN명령 의 결과를 캐싱하지 않기 때문에 많은 프로젝트 종속성을 설치하고 소스 코드를 복사하여 다음의 이점을 활용할 수 없다는 것입니다. 도커의 중간 단계 캐싱. 매번 모든 프로젝트 종속성을 다시 설치합니다.
erewok

사용 /etc/bashrc대신, 레드햇 위해 /etc/bash.bashrc(우분투 용) 위에서 언급 한 바와 같이
요르단 이런

나는 centos에 /root/.bashrc를 사용했다.
schmudu

RUN echo "source /yourscript.bash">> /etc/bash.bashrc가 트릭을 수행합니다. docker 내부에서 ros를 사용하고 환경을 설정하려면이 작업을 수행해야합니다
user27221

17

https://docs.docker.com/engine/reference/builder/#run 에 따르면 기본 [Linux] 쉘은 RUN입니다 /bin/sh -c. 당신은 bashisms을 기대하고있는 것 같습니다. 따라서 "exec form" RUN을 사용하여 쉘을 지정해야합니다.

RUN ["/bin/bash", "-c", "source /usr/local/bin/virtualenvwrapper.sh"]

그렇지 않으면 RUN의 "쉘 형식"을 사용하고 다른 쉘을 지정하면 쉘이 중첩됩니다.

# don't do this...
RUN /bin/bash -c "source /usr/local/bin/virtualenvwrapper.sh"
# because it is the same as this...
RUN ["/bin/sh", "-c", "/bin/bash" "-c" "source /usr/local/bin/virtualenvwrapper.sh"]

다른 쉘이 필요한 명령이 두 개 이상인 경우 https://docs.docker.com/engine/reference/builder/#shell 을 읽고 RUN 명령 앞에 이것을 배치하여 기본 쉘을 변경해야합니다.

SHELL ["/bin/bash", "-c"]

마지막으로 루트 사용자의 .bashrc파일에 필요한 것을 배치 한 경우 -l플래그를 SHELL또는 RUN명령에 추가하여 로그인 쉘로 만들고 소스를 확보 할 수 있습니다.

참고 : 스크립트를 RUN의 유일한 명령으로 소싱하는 것이 의미가 없다는 사실을 의도적으로 무시했습니다.


SHELL ["/bin/sh", "-c", "-l"]기본 컨테이너에서 환경 설정이있는 경우 ~ / .bashrc 등을 소스로 사용합니다.
MortenB

1
@ MortenB,하지만 /bin/shbash가 사용되지 않는 문제를 해결할 수없는 (typoed?) 을 지정했습니다 . 또한, 할 때 docker build루트 사용자의 .bashrc에 유용한 것이 없을 것입니다. 그러나 Dockerfile에 초기에 무언가를 넣으면 ( JAVA_HOME예, 아마도 . 예. 대답에 메모를하겠습니다.)
Bruno Bronosky

오타가 유감스럽게도, 기본 이미지에서 올바른 파이썬 버전의 경로를 설정하기 위해 ~ / .bashrc를 소스 해야하는 pyenv를 사용하고 있습니다. 이것은 내가 가지고있는 리눅스 기반을 사용하게하고 두 줄로 파이썬의 모든 버전을 추가합니다. 기본 파이썬이 3.5.2 인 ubuntu16.04의 python 3.7과 유사
MortenB

11

Docker 설명서에 따르면

'/ bin / sh'이외의 다른 쉘을 사용하려면 원하는 쉘로 전달되는 exec 양식을 사용하십시오. 예를 들어

RUN ["/bin/bash", "-c", "echo hello"]

https://docs.docker.com/engine/reference/builder/#run을 참조 하십시오.


이것이 실제 정답입니다. 선택된 답변의 저자 stackoverflow.com/a/25086628/117471 링크하는 설명서의 첫 번째 예만 읽은 것 같습니다. 그들은 당신이 인용 한 바로 다음 단락을 읽지 않은 것 같습니다.
Bruno Bronosky

4

당신이있는 경우 SHELL사용할 수 당신은 함께 가야한다 이 답변 - 하지 않는 당신이 당 하나의 명령에 dockerfile의 나머지 부분을 넣어 강제로 허용 하나, 사용 이 댓글을 .

이전 Docker 버전을 사용 중이고에 액세스 SHELL할 수없는 경우에는 아무것도 필요하지 않는 한 작동합니다 .bashrc(Dockerfiles에서는 드문 경우입니다).

ENTRYPOINT ["bash", "--rcfile", "/usr/local/bin/virtualenvwrapper.sh", "-ci"]

는 참고 -i배쉬 모두에서 rcfile에 읽을 수 있도록하기 위해 필요합니다.


3

당신은 실행할 수 있습니다 bash -v소스가 무엇인지 확인 를 .

심볼릭 링크를 사용하는 대신 다음을 수행합니다.

RUN echo "source /usr/local/bin/virtualenvwrapper.sh" >> /etc/bash.bashrc


3

나는 또한 달리기에 문제가 있었다 sourceDockerfile 하는 데 가있었습니다.

CentOS 6.6 Docker 컨테이너를 빌드하는 데 완벽하게 작동하지만 데비안 컨테이너에 문제가 발생했습니다.

RUN cd ansible && source ./hacking/env-setup

이것이 내가 다루는 방법이며, 우아한 방법이 아닐 수도 있지만 이것이 나를 위해 일한 것입니다.

RUN echo "source /ansible/hacking/env-setup" >> /tmp/setup
RUN /bin/bash -C "/tmp/setup"
RUN rm -f /tmp/setup

2

이것은 source파일 시스템 어딘가에 바이너리가 아닌 bash에 내장되어 있기 때문에 발생할 수 있습니다 . 나중에 컨테이너를 변경하기 위해 소싱하려는 스크립트에 대한 의도입니까?


1
스크립트는 컨테이너를 업데이트하지만 솔직히 말이 안되는 일을하려고했지만 문제를 우회했습니다.
Hugo Rodger-Brown

1

나는 env 물건을 넣고 결국 뭔가를 .profile돌연변이SHELL

SHELL ["/bin/bash", "-c", "-l"]

# Install ruby version specified in .ruby-version
RUN rvm install $(<.ruby-version)

# Install deps
RUN rvm use $(<.ruby-version) && gem install bundler && bundle install

CMD rvm use $(<.ruby-version) && ./myscript.rb

3
"-c"는 마지막 인자가되어야합니다 (명령을 실행하기 전에)
peterk

0

pip를 사용하여 virtualenv에 무언가를 설치하려는 경우 PATH env를 수정하여 virtualenv의 bin 폴더를 먼저 볼 수 있습니다

ENV PATH="/path/to/venv/bin:${PATH}"

그런 다음 pip installDockerfile에서 따르는 모든 명령은 / path / to / venv / bin / pip를 먼저 찾아서 사용합니다. 이는 시스템 파이썬이 아닌 해당 virtualenv에 설치됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.