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
).