2017-09-15 9 views
4

イメージにrsaキーを含めてビルド時にgit repoをイメージにクローンすることができます。しかし、私は実際にドッカーがレポを構築する際にこのキーを保持する必要はありません。誰もこれを処理する方法についての良い推薦を持っていますか?ドッカーのドキュメントやさまざまなスレッドからは、ビルドコンテキストの外側にあるファイルがCOPYには見えないと思われます。別に私が使用することに興味がない次のソリューションから:Docker:ビルドコンテキストの外からイメージにrsaキーを追加する

How to include files outside of Docker's build context?

これに対するより良い解決策はありますか?あるいは、ビルドレポにキーを保持するか、使用したいRSAキーの場所からビルドする必要がありますか?

ビルドレポからキーをgitignoreし、私がクローンするたびにそれを入れ、readmeに書き留めておけば他の開発者もこれを行うことができます。

---私のソリューション---

私は、このための「正しい」答えがあると思いますが、ここで私が一緒に行った解決策だっませません。

私はLinuxユーザー(どこか)を作成し、それにキーを生成します。次に、レポ・クローニング権限のみを持つgitlabでユーザを作成します。私は、linuxユーザの公開鍵をgitlabユーザに追加します。ビルドのために.sshフォルダを作成し、設定ファイルを使ってユーザの秘密鍵をコピーします。私はちょうどドッカーのビルドレポにそのユーザーのキーを格納します。

ビルド手順:

RUN mkdir ~/.ssh 
RUN touch ~/.ssh/known_hosts 
RUN ssh-keyscan -t rsa gitlab_host > ~/.ssh/known_hosts 
COPY ./ssh/config /root/.ssh 
COPY ./ssh/id_rsa_app /root/.ssh 
RUN chmod 600 /root/.ssh/id_rsa_app 

SSHの設定ファイル:

Host gitlab-app 
    HostName gitlab_host 
    IdentityFile /root/.ssh/id_rsa_app 
    IdentitiesOnly yes 

今のgitのクローンは、ビルドの内部で動作します。

答えて

3

build argumentはどうですか?あなたがイメージをビルドするとき、次に

ARG rsakey 
RUN test -n "${rsakey}" && { \ 
     mkdir -p -m 700 /root/.ssh; \ 
     echo "${rsakey}" > /root/.ssh/id_rsa; \ 
     chmod 600 /root/.ssh/id_rsa; \ 
    } || : 

--build-argオプションを使用します:あなたのDockerfileでこのような何かを行う。これは、それを必要とせずに、ビルド時に画像にキーを挿入します

docker build -t sshtest --build-arg rsakey="$(cat /path/to/id_rsa)" . 

をビルドのコンテキストで生きています。

+0

ありがとう、これは実行可能な解決策になります。私たちは、 'app'という名前のLinuxユーザーを作成し、そのキーを作成し、gitlab上にreposを複製する権限しか持たない 'app'ユーザーを作成することにしました。次に、このキーを設定ファイルとともにドッカーのreposに入れます。上記を参照。 – ThriceGood

関連する問題