programing

도커 컨테이너에서 PATH 환경 변수를 영구적으로 업데이트하는 중

topblog 2023. 9. 5. 19:33
반응형

도커 컨테이너에서 PATH 환경 변수를 영구적으로 업데이트하는 중

에 추가하려고 했습니다.PATH서류철에~/.profile그리고./etc/profile하기와 같이

PATH = $PATH:/required/path

하지만, 그것은 작동하지 않습니다.그리고 나서 라인 쇼를 추가하려고 했는데, 그것도 작동하지 않았습니다.

export PATH

컨테이너와 호스트를 모두 다시 시작한 후에도 작동하지 않았습니다.

다음을 포함하려는 경우/new/pathDocker 파일에서 행 추가:

ENV PATH "$PATH:/new/path"

Docker에서 파일이 작동해야 합니다.

정답

가장 잘 투표된 답변은 추가할 것을 제안합니다.ENV PATH "$PATH:/new/path"도커 파일에 연결하면 정말 작동할 것입니다.

그런데 왜 저한테는 안 되는 거죠?

일부 의견/답변에서 언급한 바와 같이, 솔루션 1.은 일부 사람들에게 효과가 없습니다.

그 이유는PATH다음과 같은 스크립트로 덮어쓸 수 있습니다..bashrc도커 컨테이너를 실행할 때, 따라서 다음과 같은 인상을 줍니다.ENV PATH...효과가 없었지만, 이론적으로는 효과가 있었습니다.

이 문제를 해결하려면 다음에 추가해야 합니다..bashrc올바른 사람PATH다음 명령을 도커 파일에 추가합니다.

RUN echo "export PATH=/new/path:${PATH}" >> /root/.bashrc

도커 파일에 줄 넣기ENV PATH xxx이 Docker 파일의 예를 참조하십시오. https://gist.github.com/deepak/5933685

나는 이 질문에 대한 답을 irc 채팅에서 얻었습니다.이것을 마주칠 수 있는 모든 사람들의 이익을 위해 여기에 주어집니다.많은 사람들이 업데이트를 하면서 오답을 했습니다.~/.profile하지만 이것은 효과가 없었다.그래서 아래의 답을 사용하세요.

파일 업데이트~/.bashrc사용자용 또는 파일 업데이트/etc/enviroment모든 사용자에게 적용되는 전역 변경에 대해 전역.

.bashrc내보내기 경로:export PATH=$PATH:/new/path/bin

환경:PATH=$PATH:/new/path/bin

인터랙티브 셸과 비인터랙티브 셸의 차이는 언급되지 않았습니다.따라서 위의 솔루션이 때로는 효과가 있는 것처럼 보이고 때로는 그렇지 않은 이유입니다.

bashrc일반적으로 파일을 건너뜁니다.예를 들어, 데비안에서,/etc/bash.bashrc파일은 매우 명확하게 다음과 같이 말합니다.

# System-wide .bashrc file for interactive bash(1) shells.

# To enable the settings / commands in this file for login shells as well,
# this file has to be sourced in /etc/profile.

# If not running interactively, don't do anything
[ -z "$PS1" ] && return
  • A RUNDocker 파일의 명령은 대화형이 아닌 셸을 호출합니다.그리고 그 길은ENV가져가게 될 것이고,bashrc스크립트가 실행되지 않습니다.
  • docker run -it <image> /bin/bash대화형 셸을 호출합니다.bashrc실행되며 에 설정된 모든 항목을 재정의할 수 있습니다.ENV예를 들면PATH일반적으로 정의되지 않음PATH=$PATH:/...다음 중 하나의 구문bashrc대본

두 가지 작동 모드 간에 안전하고 일관성을 유지하기 위해 Docker 파일에서 다음 작업을 수행할 수 있습니다.

ENV PATH /master/go/bin:${PATH}
RUN echo "${PATH}" >> /etc/bash.bashrc

참고:/etc/bash.bashrc데비안 위치이며 다른 배포 이미지에서는 다를 수 있습니다.

이것은 제 도커 파일입니다. Centos에서 Java 홈 경로를 추출하고 설정했습니다. 그리고 그것은 저에게 효과가 있었습니다.

도커 파일:

FROM  centos:7
RUN yum update -y yum install -y tar
COPY jdk-7u80-linux-x64.tar.gz /opt/
WORKDIR /opt
RUN tar -xvf jdk-7u80-linux-x64.tar.gz
RUN chmod -R 755 jdk1.7.0_80
RUN echo export JAVA_HOME=/opt/jdk1.7.0_80 >> /etc/profile
RUN echo export PATH='$PATH:$JAVA_HOME/bin' >> /etc/profile
ENV JAVA_HOME "/opt/jdk1.7.0_80"
ENV PATH "${JAVA_HOME}/bin:${PATH}"

언급URL : https://stackoverflow.com/questions/28722548/updating-path-environment-variable-permanently-in-docker-container

반응형