いくつかの疑似TTYを割り当てて、インタラクティブな方法でDockerfileからDockerコンテナーを構築できますか?


12

私はDockerfileの下からコンテナを構築します:

FROM ubuntu:14.04
...
RUN apt-get update && apt-get install -y vim
#RUN ssh-keygen -f /root/.ssh/id_rsa -N strongpass123$%^
RUN ssh-keygen -f /root/.ssh/id_rsa
...

私はめったにそれをしませんが、それの使用の前後に多くのコマンドがありssh-keygenます。

スクリプトからdocker exec -it thirsty_darwin sh script.sh画像にタグを付けて、画像にタグを付け、コンテナー(画像)のチェーンを使用できることはわかっていますが、私が望むほど明確な解決策ではありません。

最悪の場合でも、ssh-add ~/.ssh/id_rsaexpectツールを使用する必要がある場合です。期待ツールが私のパスワードをハードコード化した。私はそれをしたくありません。

回答:


17

一般に、Dockerイメージにはシークレットを含めないでください。このトピックの詳細については、この回答を参照してください。

Dockerは、この問題で説明されているように、正当な理由によりインタラクティブビルドサポートしていません。

本当にこれを行う必要がある場合は、次のdocker commitように使用できます。

docker build -t thirsty_darwin_base /path/to/Dockerfile
docker run -it --name=thirsty_darwin_changes thirsty_darwin_base /bin/bash
# do interactive stuff in the shell, then exit
docker commit thirsty_darwin_changes thirsty_darwin

これでthirsty_darwinインタラクティブな変更が行われました。

更新:この回答が書かれてから、Dockerはより包括的なシークレット管理をリリースしました。


すでに述べたように、私はその解決策を見つけましたが、最初のリンク(この答え)には私の問題に対する適切な回避策があります。VOLUMEコンテナに独自のキーを作成する代わりに、ホストからキーをマウントします。ありがとう!
koralgooll 2016

1
docker commitしかし、私は通常は行わないことをお勧めします-それはあなたを「黄金のイメージ」のコーナーに少し描くことができます。
Sobrique 2016

それは@Sobriqueの良い点です。これが、Dockerがインタラクティブビルドまたは非決定的ビルドを推奨しない理由の1つです
Matt Vollrath

では、Dockerは単にマシンだけを構築するために使用されているのでしょうか?多くのインストールではユーザーの操作が必要になるためです。ビルドでDockerfileを使用できません。SAGEをインストールする必要があり、ユーザーにいくつかの質問をするからです。
Magno C

@ MagnoC、Dockerで何かを構築することはできません。Dockerfilesの背後にある考え方は、実行時に常に同じ結果が欲しいということです。インタラクティブな入力はそれを変えることができます。Mattが言ったように、変更されたコンテナーをイメージにコミットできます。それは私が少なくともやってきたことです..
musicliftsme
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.