Alpine Linux 로그인을 위한 시작 스크립트는 무엇입니까? (로그인할 때 별칭이 필요합니다)

Alpine Linux 로그인을 위한 시작 스크립트는 무엇입니까? (로그인할 때 별칭이 필요합니다)

Docker 컨테이너의 경우 Node:Alpine과 같은 Alpine Linux를 사용하여 이미지를 최대한 작게 유지합니다. 하지만 때로는 컨테이너에 로그인하고 싶을 때도 있습니다. 이 컨테이너에 별칭을 넣는 것이 편리합니다.

표준 Linux를 사용하는 경우 .bashrc를 /root/.bashrc에 매핑하고 모든 별칭을 사용할 수 있도록 합니다.

하지만 Alpine Linix에 해당하는 .bashrc를 찾을 수 없습니다.

나는 시도했다:

  • .bashrc
  • .bash_config 파일
  • . 윤곽
  • .ash_profile
  • .ashrc

모두 작동하지 않습니다.

추가 정보

Alpine Linux는 Docker 컨테이너에서 시작됩니다.

도커파일

FROM node:alpine

ENV NODE_ENV production

WORKDIR /usr/src/app

COPY --from=builder /usr/src/app/build .

로그인 컨테이너

호스트 컴퓨터(내 OSX Macbook)에서 다음 명령을 사용합니다.

docker exec -it <containerName> /bin/sh

docker-compose.yml

  jobrunner:
    build:
      context: ./build
      dockerfile: Dockerfile
    image: jobrunner:1.0
    volumes:
      - ./deployment/jobs/root/.bashrc:/root/.bashrc
      - ./deployment/jobs/root/.bashrc:/root/.profile
      - ./logs:/usr/src/app/logs
      - ./data:/usr/src/app/data
    environment:
      NODE_ENV: production
    restart: unless-stopped
    container_name: JobHelloWorld
    command: ["node", "./src/job_starter.js"]

컨테이너를 시작합니다.

docker-compose up -d

컨테이너에

내가 컨테이너에 들어갈 때

docker exec -it <containername> /bin/sh

다음은 주석에서 요청한 명령의 출력입니다.

/usr/src/app # echo $SHELL

/usr/src/app # ps -p $$
ps: unrecognized option: p
BusyBox v1.32.1 () multi-call binary.

Usage: ps [-o COL1,COL2=HEADER] [-T]

Show list of processes

    -o COL1,COL2=HEADER Select columns for display
    -T          Show threads
/usr/src/app #

폴리스티렌-EF

"ps -ef"의 출력도 흥미롭습니다.

/usr/src/app # ps -ef
PID   USER     TIME  COMMAND
    1 root      0:00 sleep 360d
    8 root      0:00 sh
   16 root      0:00 ps -ef

sh 쉘이 표시됩니다(맞나요?). 그러나 /bin/sh 시작이 작동하지 않습니다.

보조 | grep $$

/usr/src/app # ps aux | grep $$
   19 root      0:00 /bin/sh
   26 root      0:00 grep 19

/bin/sh는 링크입니다

/usr/src/app # ls -la /bin/sh
lrwxrwxrwx    1 root     root            12 Apr 14 10:25 /bin/sh -> /bin/busybox

작은 테스트 변경 사항 .profile

/usr/src/app # cat ~/.profile
alias l='ls $LS_OPTIONS -la'

export foo="bar"

/usr/src/app #
/usr/src/app # echo $foo

/usr/src/app #
/usr/src/app # . ~/.profile
Job-/usr/src/app# echo $foo
bar
Job-/usr/src/app#

보시다시피 .profile은 작동하지만 Docker 환경에서 Alpine Linux에 로그인할 때 실행되지 않거나 Alpine이 로그인할 때 .profile을 실행하지 않습니다.

Alpine Linux의 대화형 세션을 위한 시작 스크립트가 무엇인지 아는 사람이 있습니까?

또는: "docker exec"에서 로그인할 때 Docker가 .profile을 실행하지 않는 이유를 아는 사람이 있습니까?

답변1

시간을 내어 도움을 주신 @terdon에게 많은 감사를 드립니다.

Docker 컨테이너에서 Alpine Linux에 로그인할 때 다음 명령을 사용하여 .profile을 실행해야 합니다.

docker exec -it <containerName> /bin/sh -l

끝에 -l을 참고하세요(로그인의 경우 'l'? :-) ). 이로 인해 Alpine 셸이 시작됩니다.로그인 쉘이는 읽기를 의미 /etc/profile하므로 ~/.profile이 파일을 사용하여 별칭을 정의할 수 있습니다.

그러나 Ubuntu 컨테이너에는 이를 필요로 하지 않습니다.

답변2

$ENV로그인 시 실행할 스크립트의 경로에 환경 변수를 설정할 수 있습니다 . 이렇게 하면 -l에 매개변수로 전달할 필요가 없습니다 /bin/sh.

예:

ENV ENV=/root/.ashrc

/root/.ashrc시작시 소스 입니다 .

답변3

Alpine Linux Docker 컨테이너에 사용자로 로그인하려면,구성된 로그인 셸을 사용하세요., 사용 login -f username.

예를 들어,

docker exec -it mycontainer login -f root

사용자가 설정한 비밀번호를 사용하고 싶다면 -f명령에서 비밀번호를 제거하세요.

이렇게 하면 사용자가 구성한 로그인 셸이 로그인 셸로 사용됩니다.~처럼로그인 셸. 이는 로그인 셸로 실행될 때 일반적으로 셸이 읽는 모든 셸 초기화 파일을 읽는다는 의미입니다( /etc/zsh/zprofile예: ~/.zprofile의 경우 zsh).

관련 정보