루트 사용자를 위한 컨테이너를 구축한 다음 내 사용자를 사용하여 실행하고 /root/.zshrc
내부에서 가져오려고 합니다.
다음은 최소한의 예입니다.
FROM ubuntu:20.04
RUN apt update
RUN apt install --assume-yes --fix-broken \
curl \
wget \
zsh
RUN echo EDITOR=vim >> /root/.zshrc
RUN chmod a+rx /root
CMD [ "source /root/.zshrc", "zsh"]
호출은 다음과 같습니다.
docker run --rm -it -v "$HOME/.ssh:$HOME/.ssh:ro" -v "$HOME/.netrc:$HOME/.netrc:ro" -v /etc/passwd:/etc/passwd:ro -v /etc/shadow:/etc/shadow:ro -v /etc/group:/etc/group:ro --user $UID:$UID foo_minimal
내가 받은 오류는 다음과 같습니다.
docker: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "exec: \"source /root/.zshrc\": stat source /root/.zshrc: no such file or directory": unknown.
여기서 무엇이 잘못되었을 수 있습니까?
답변1
zsh
원래 방법을 계속 사용하고 로그인 시 얻은 파일을 업데이트하려는 경우 다음을 추가할 수 있습니다 /etc/zsh/zshrc
.
RUN echo EDITOR=vim >> /etc/zsh/zshrc
그런 다음 사용자가 컨테이너를 실행할 때마다 자동으로 파일을 가져옵니다.
답변2
사용자에게 사용자 이름과 셸 RC 파일이 있는 경우 Dockerfile의 일부로 생성하는 것을 고려할 수 있습니다.
FROM ubuntu:20.04
RUN apt update && \
apt install --assume-yes --fix-broken \
curl \
wget \
zsh
RUN groupadd -g 1000 bob && \
useradd -m --uid 1000 --gid 1000 -s /bin/zsh bob && \
echo EDITOR=vim >> /home/bob/.zshrc
CMD [ "zsh" ]
bob
여기서는 gid 1000이라는 그룹과 uid 1000이라는 사용자를 추가했습니다 ( uid 1000과 관련된 어떤 이름으로든 bob
변경할 수 있습니다 .bob
~/.zshrc
그런 다음 대신 해당 사용자에게 쓸 수 있습니다/root/.zshrc
답변3
나는 그것을 실행했다 :
.zshrc source /root/.zshrc라는 파일을 생성하고 사용자의 홈 디렉터리에 설치합니다.
~/git/docker/base-ubuntu-20.04/test-delete(allow_multiuser*) » cat .zshrc mihai@mihai-pc 17/10/20 21:07:24
#!/bin/zsh
source /root/.zshrc
그런 다음:
~/git/docker/base-ubuntu-20.04/test-delete(allow_multiuser*) » docker run -it -v "$HOME/.ssh:$HOME/.ssh:ro" -v "$HOME/.netrc:$HOME/.netrc:ro" -v /etc/passwd:/etc/passwd:ro -v /etc/shadow:/etc/shadow:ro -v /etc/group:/etc/group:ro --user $UID:$UID --env "$USER=$USER" -v $(realpath .zshrc):/home/$USER/.zshrc foo_minimal /bin/zsh
df45e8b82593% echo $EDITOR
vim
이 솔루션에 대해 어떻게 생각하시나요?