docker에서 사용자로 git 또는 ssh 클라이언트 실행: uid 사용자가 존재하지 않습니다.

docker에서 사용자로 git 또는 ssh 클라이언트 실행: uid 사용자가 존재하지 않습니다.

질문:

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/mypasswda 추가 ).-v /tmp/mypasswd:/etc/passwd:rodocker 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 컨테이너에 사용자를 생성한 다음 해당 사용자로 전환합니다 .

관련 정보