codememo

도커에서 디렉터리 명령을 변경하시겠습니까?

tipmemo 2023. 8. 16. 22:23
반응형

도커에서 디렉터리 명령을 변경하시겠습니까?

도커에서 다음 작업을 수행합니다.

git clone XYZ
cd XYZ
make XYZ

하지만 cd 명령어가 없기 때문에 매번 전체 경로를 전달해야 합니다(XYZ / 전체 경로로 만들기).이것에 대한 좋은 해결책이 있습니까?

다른 디렉토리로 변경하려면 WORKDIR을 사용합니다.WORKDIR 이후의 모든 RUN, CMD 및 EntryPoint 명령이 해당 디렉토리에서 실행됩니다.

RUN git clone XYZ 
WORKDIR "/XYZ"
RUN make

스크립트를 실행하거나 RUN에 대해 더 복잡한 매개 변수를 실행할 수 있습니다.다음은 이전에 보기 위해 다운로드한 도커 파일의 예입니다.

RUN cd /opt && unzip treeio.zip && mv treeio-master treeio && \
    rm -f treeio.zip && cd treeio && pip install -r requirements.pip

'&&'을 사용하기 때문에 이전 명령이 모두 성공한 경우에만 최종 'pip install' 명령에 도달합니다.

실제로 모든 RUN은 새 커밋과 (현재) AUFS 계층을 만들기 때문에 Docker 파일에 너무 많은 명령이 있으면 제한을 모두 사용하므로 파일이 안정적일 때 RUN을 병합하는 것이 매우 유용할 수 있습니다.

혹시 두 번이나WORKDIR먹히든 안 먹히든, 먹히든 :)

FROM ubuntu:18.04

RUN apt-get update && \
    apt-get install -y python3.6

WORKDIR /usr/src

COPY ./ ./

WORKDIR /usr/src/src

CMD ["python3", "app.py"]

하나의 RUN 명령을 모든 명령에 사용할 수 있습니다.

RUN git clone XYZ && \
    cd XYZ && \
    make XYZ

도커 이미지를 실행할 때 컨테이너의 작업 디렉토리를 변경하려는 경우,-w(의 줄임말)--workdir) 옵션:

docker run -it -w /some/valid/directory/inside/docker {image-name}

참조:

docker run옵션: https://docs.docker.com/engine/reference/commandline/run/ #http://options

만약 당신이 달려와야 한다면 주의하세요.bash쉘, 당신은 단지 그것만이 필요한 것이 아닙니다.RUN make하지만 당신은 전화를 해야 합니다.bash도커에 있기 때문에 이전의 셸, 당신은.sh부전각

/bin/sh에서 가져옴: 1: gvm:을(를) 찾을 수 없으며, 이는 더 많거나 더 적음을 나타냅니다.

셸이 /bin/sh이지만 소스는 초기화를 /bin/bash로 지정합니다.~/.bashrc.

즉, 이 문제는 "배시" 대신 "sh" 셸이 사용되는 모든 설정에서 발생할 수 있으며, 이는 다음과 같습니다."/bin/sh: 1: MY_COMMAND: not found".

Docker 파일의 경우 권장 사항을 사용합니다.

RUN /bin/bash -c 'source /opt/ros/melodic/setup.bash'

또는 "와 함께.[](사용하지 않는 것이 좋습니다):

RUN ["/bin/bash", "-c", "source /opt/ros/melodic/setup.bash"]

bash의 모든 새 RUN은 "0부터 시작"으로 분리됩니다.예를 들어, 이 설정을 주의하십시오.WORKDIR /MY_PROJECT시작 폴더를 다시 ".bashrc"로 설정해야 하므로 도커 파일의 bash 명령이 bash 명령에 영향을 미치지 않습니다.필요합니다cd /MY_PROJECTWORKDIR을 설정한 경우에도 마찬가지입니다.

참고: "opt/.../" 앞의 첫 번째 "/"를 잊지 마십시오. 그렇지 않으면 다음 오류가 발생합니다.

/bin/bash: opt/ros/melodic/setup.bash: No such file or directory

작업:

 => [stage-2 18/21] RUN ["/bin/bash", "-c", "source /opt/ros/melodic/setup.bash"]                                  0.5s
 => [stage-2 19/21] [...]

줄 수가 많은 경우 이 값이 어떻게 표시되는지 또는 .bashrc를 대신 채우는 방법에 대한 자세한 내용은 SuperUser의 "/bin/sh: 1: MY_COMMAND: not found"를 참조하십시오.하지만 그것은 여기서 실제 질문을 조금 넘어선 것입니다.

PS: 실행할 명령을 단일 bash 스크립트에 넣고 해당 bash 스크립트를 Docker 파일에서 실행할 수도 있습니다(bash 명령도 Docker 파일에 포함하는 것이 낫지만, 제 의견에 따름).

#!/bin/bash
set -e

source /opt/ros/melodic/setup.bash

언급URL : https://stackoverflow.com/questions/20632258/change-directory-command-in-docker

반응형