도커에서 디렉터리 명령을 변경하시겠습니까?
도커에서 다음 작업을 수행합니다.
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
'codememo' 카테고리의 다른 글
| ORA-29283: "SYS"에서 잘못된 파일 작업 ORA-06512:.UTL_FILE", 536행 (0) | 2023.08.16 |
|---|---|
| 도커는 lxc-tools(사용자 공간 LXC 도구)에 무엇을 추가합니까? (0) | 2023.08.16 |
| 최대 길이로 최대 절전 모드에서 열의 길이를 설정하는 방법 (0) | 2023.08.16 |
| axios에 보류 중인 요청이 있는지 확인합니다. (0) | 2023.08.16 |
| 프로젝트 폴더가 없는 git clone (0) | 2023.08.16 |