以用户身份在 docker 中运行 git 或 ssh 客户端:uid 不存在用户

以用户身份在 docker 中运行 git 或 ssh 客户端:uid 不存在用户

问题:

git clone myuser@server:repo.git我正在尝试从 docker 容器内运行。在容器内部(由于策略),我与 docker 主机系统(非 root)上的用户是同一用户,并且安装了我的 home。

遗憾的是,当克隆或尝试 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的行似乎可以解决问题(例如,getent passwd $USER > /tmp/mypasswd然后将 a 添加-v /tmp/mypasswd:/etc/passwd:rodocker runcmd)。

遗憾的是,这需要隐藏/修改容器的/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在 docker 容器中使用您的用户 ID 创建一个用户,然后切换到该用户。

相关内容