Debian:11 이미지에서 /bin/sh에 대한 PATH 설정

Debian:11 이미지에서 /bin/sh에 대한 PATH 설정

배경

저는 Debian:11을 기반으로 이미지를 만들고 있습니다. 동적 값을 설정하고 결정 PATH하려고 합니다./bin/sh이미지가 구축되는 동안. (이것"이미지가 구축되는 동안ENV PATH"매우 중요합니다. Dockerfile에 정적 파일을 단순히 포함할 수는 없습니다 .)

질문

내가 실행할 때 :

docker build . --tag debian-with-chrome-driver
docker run -it --rm debian-with-chrome-driver
echo $PATH

실제 결과는 다음과 같습니다.

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

원하는 결과는 다음과 같습니다.

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/chromedriver/linux-119.0.6045.105/chromedriver-linux64

내가 시도한 것

PATH다양한 StackExchange 게시물을 기반으로 다음 설정을 시도했습니다 .

  • /etc/profile
  • /etc/login.defs
  • /etc/environment

위 문서의 관련 내용은 다음과 같습니다.

# tail -n 3 /etc/profile
PATH=${PATH}:/chromedriver/linux-119.0.6045.105/chromedriver-linux64
export PATH

# cat /etc/login.defs | grep chromedriver
ENV_SUPATH      PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/chromedriver/linux-119.0.6045.105/chromedriver-linux64
ENV_PATH        PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/chromedriver/linux-119.0.6045.105/chromedriver-linux64

# cat /etc/environment
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/chromedriver/linux-119.0.6045.105/chromedriver-linux64

bash에 대한 경로를 성공적으로 설정했지만(아래 표시) sh에 대한 경로를 설정해야 합니다.

# bash  
root@4e159cfc9fe5:/# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/chromedriver/linux-119.0.6045.105/chromedriver-linux64    

도커파일

직접 시도해 볼 수 있습니다.

docker build . --tag debian-with-chrome-driver
FROM debian:11

RUN apt-get update && apt-get install -y curl

# from https://github.com/nodesource/distributions#deb
RUN curl -SLO https://deb.nodesource.com/nsolid_setup_deb.sh \
    && chmod 500 nsolid_setup_deb.sh \
    && ./nsolid_setup_deb.sh 21 \
    && apt-get -y install nodejs

# from https://developer.chrome.com/blog/chrome-for-testing/#how-can-i-get-chrome-for-testing-binaries
RUN npx -y @puppeteer/browsers install chrome@stable \
    && npx -y @puppeteer/browsers install chromedriver@stable

# add the chromedriver to the PATH
RUN export CHROME_DRIVER_PATH=$(find /chromedriver -name "chromedriver" -type f -executable -printf "%h" -quit) \
    && export APPEND_CHROME_DRIVER_PATH="PATH="'${PATH}'":${CHROME_DRIVER_PATH}" \
    # \
    && echo "export ${APPEND_CHROME_DRIVER_PATH}\n" >> /etc/bash.bashrc \
    && echo "${APPEND_CHROME_DRIVER_PATH}\nexport PATH\n" >> /etc/profile \
    # \
    && export CHROME_DRIVER_PATH_ESCAPED=$(echo ${CHROME_DRIVER_PATH} | sed 's/\//\\\//g') \
    && sed -i '/^ENV_SUPATH.*/ s/$/:'"${CHROME_DRIVER_PATH_ESCAPED}"'/' /etc/login.defs \
    && sed -i '/^ENV_PATH.*/ s/$/:'"${CHROME_DRIVER_PATH_ESCAPED}"'/' /etc/login.defs \
    # \
    && echo "PATH=${PATH}:${CHROME_DRIVER_PATH}\n" >> /etc/environment \
    && echo ${PATH}

ENTRYPOINT [ "bin/sh" ]

답변1

/bin/sh데비안 에서는 ( dash) /etc/profile등은 로그인 쉘에만 사용됩니다. 비로그인 쉘의 경우 환경 변수에서 사용할 시작 스크립트를 지정할 수 있습니다 ENV. 당신의 끝에서 Dockerfile:

    && echo "PATH=${PATH}:${CHROME_DRIVER_PATH}\n" >> /etc/environment \
    && echo "PATH=${PATH}:${CHROME_DRIVER_PATH}\n" >> /etc/shinit \
    && chmod 755 /etc/shinit \
    && echo ${PATH}

ENV ENV=/etc/shinit

ENTRYPOINT [ "bin/sh" ]

관련 정보