질문:
git clone myuser@server:repo.git
도커 컨테이너 내에서 실행하려고 합니다. 컨테이너 내부(정책으로 인해)는 docker 호스트 시스템(루트가 아님)과 동일한 사용자이며 홈이 설치되어 있습니다.
안타깝게도 복제하거나 SSH 접속을 시도할 때 server
다음과 같은 오류 메시지가 나타납니다.
No user exists for uid 1337
MVCE:
문제를 재현하려면 다음 Docker 컨테이너를 실행하면 됩니다.
docker run --rm -it -v /home/$USER:/home/$USER -e HOME=/home/$USER -w /home/$USER -u $UID:100 --cap-drop=ALL kiesel/debian-ssh-client
그리고 컨테이너 내에서 다음 명령 중 하나를 실행합니다.
git clone myuser@server:repo.git
ssh -vT myuser@server
해결책:
내 uid에 가짜 줄을 추가하면 /etc/passwd
효과가 있는 것 같습니다(예: cmd 에 getent passwd $USER > /tmp/mypasswd
a 추가 ).-v /tmp/mypasswd:/etc/passwd:ro
docker run
불행하게도 이를 위해서는 컨테이너를 숨기거나 수정해야 하는데 /etc/passwd
, 이로 인해 어느 시점에서 문제가 발생할 수 있다고 생각됩니다.
질문:
- SSH(클라이언트)가 로컬(컨테이너)를 보는 이유는 무엇입니까
/etc/passwd
? - (사용자 권한을 사용하여) 비활성화하는 쉬운 방법이 있습니까?
답변1
이 bash 기능을 사용하십시오:
function docker--run() {
if [[ -z $1 ]]; then
echo 'docker--run [-v $PWD:/src] IMAGE'
return 1
fi
# useradd for ubuntu (which has adduser as well)
# adduser for alpine, others not tested
docker run -it --rm --entrypoint sh "$@" -c "
[ -x /usr/sbin/useradd ] && useradd -m -u $(id -u) u1 -s /bin/sh || adduser -D -u $(id -u) u1 -s /bin/sh;
exec su - u1"
}
이것을 다음과 같이 실행할 수 있습니다.
docker--run -v /home/$USER:/home/u1 kiesel/debian-ssh-client
u1
사용자 ID를 사용하여 Docker 컨테이너에 사용자를 생성한 다음 해당 사용자로 전환합니다 .