dockerでユーザーとしてgitまたはsshクライアントを実行する:uidユーザーは存在しません。

dockerでユーザーとしてgitまたはsshクライアントを実行する:uidユーザーは存在しません。

質問:

git clone myuser@server:repo.gitDockerコンテナ内で実行しようとしています。コンテナの内部(ポリシーのため)は、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コンテナにユーザーを作成し、そのユーザーに切り替えます。

関連情報