コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

dockerコンテナからGitHubへセキュアにアクセスするためのやり方

参照サイトのとおりにやればできるんだけど、仕組みの部分を補遺する形のメモ

やり方

1. GitHubaccess_tokenを用意する

これはgithubのページから設定とかで取り出してください。

Creating a personal access token for the command line - User Documentation

2. 認証情報を環境変数から読み込むファイルを用意する

git-credential-github-token というファイル名で、以下のファイルを作る。

#!/bin/sh

echo protocol=https
echo host=github.com
echo username=$GITHUB_USERNAME
echo password=$GITHUB_TOKEN

これは認証情報の事前埋め込み用の記述で詳しくは「7.14 Git のさまざまなツール - 認証情報の保存」 を参考にしてほしい。

なお、ファイル名は以下のルールで命名規則がなされている。

これはつまり、先ほど説明した一連のヘルパーには、git-credential-cache や git-credential-store といった名前がつくということです。コマンドライン引数を受け付けるよう設定することもできます。 設定方法は “git-credential-foo [args] .” になります。 なお、標準入出力のプロトコルは git-credential と同じですが、指定できるアクションが少し違ってきます。 - 7.14 Git のさまざまなツール - 認証情報の保存

3. Dockerファイルに以下の形で書き込む

使いたいprivateリポジトリがある対象が https://github.com/hogehoge/ の場合以下の通り

FROM ruby

WORKDIR /app

COPY ./git-credential-github-token /usr/local/bin
RUN git config --global url."https://github.com/hogehoge/".insteadOf ssh://git@github.com/hogehoge/ \
  && git config --global credential.helper github-token

4. Dockerを実行する環境に1で取得した情報をセットする

環境変数に情報をセットする

export GITHUB_USERNAME={{githubのユーザ名}}
export GITHUB_TOKEN={{生成したトークン}}

5.認証情報を環境変数に仕込んで実行する

$ docker build .
$ docker run -it -e GITHUB_USERNAME=YOUR_USER_NAME -e GITHUB_TOKEN=YOUR_GITHUB_TOKEN -v .:/app IMAGE bash

docker-composeでやりたい場合は以下

docker-compose build --build-arg GITHUB_USERNAME=$GITHUB_USERNAME --build-arg GITHUB_TOKEN=$GITHUB_TOKEN

しくみ

githubの認証情報を GITHUB_USERNAMEGITHUB_TOKEN の環境変数から読み込むようにし、実行時またはbuild時に環境変数に仕込ませることで利用者が設定した任意のtokenを利用することができる。

参考