ホストで実行され、Dockerコンテナーを作成/開始/停止するスクリプトがあります。コンテナ内のrootユーザーのパスワードを変更するスクリプトが欲しいのですが。
コンテナーはsshサーバーなので、次のことを試しました:sshpass -p 'OLDPASS' ssh root@<container-IP> 'echo -e "NEWPASS\nNEWPASS" | passwd root'
しかし、それは機能しません。先に進み、デバッグに多くの時間を費やす前に、よりスマートな方法があるかどうかを知りたいと思います。
適切な「ドッカー方法」は、Dockerfileによって実行されるスクリプトを作成することであることを理解しています。これは、共有ボリュームからパスワードをプルし、それをルートパスワードとして設定します。これは複雑に聞こえますが、私はそれを行う方法を知っており、私が使用する別のDockerイメージでうまく機能します。しかし、私はこれのためにそれをしたくありません。
ユーザーのパスワードを非対話的に変更するために、Dockerまたはsshを使用するコマンドが必要です。
これはUbuntu 14.04.4 LTSで問題なく動作します。
コンテナーを再構築するスクリプト(「ホスト」で実行されている必要があります)に、次の行を追加します。
$PASS='<a-good-password>'
echo -e "$PASS\n$PASS" | Sudo docker exec -i <container-id-or-name> passwd
PASSWORD=$(zenity --password --title="Docker" 2>/dev/null)
パスワードを要求するポップアップを開き、それを返します。スクリプトにパスワードが保存されていません
セキュリティをあまり気にせずにパスワードを設定する必要があるDockerコンテナがある場合は、Dockerfileにステートメントを追加できます。
RUN echo "root:root" | chpasswd
これはDockerとは関係ありません。 passwd
からパスワードを提供することを明示的にstdin
と言う必要があります。
echo 'newpassword' |passwd root --stdin