はじめに
DockerでPrivateリポジトリをCloneするときなど結構手間取りますよね。
Docker 18.09から導入されているDocker Build kitを使うといいというのは知っていたのですがUserを切り替えるとうまく行きませんでした。
その解決方法を書いていきます。
参考文献
moby/buildkit リポジトリに詳しく書いてあります。これ読めば大丈夫
設定例
前提条件
-
github.comにSSH接続できる公開鍵がある
-
ホスト側で下記コマンド実行例のような出力を得られる
$ ssh git@github.com # 出力例 PTY allocation request failed on channel 0 Hi (User名)! You've successfully authenticated, but GitHub does not provide shell access. Connection to github.com closed.
-
Docker CE > 18.09
-
User: test(uid=1000,gid=1000)
Dockerfile
ポイントとしては、ファイル先頭のsyntax
を記述する必要があること、--mount=type=ssh,uid=100,gid=100
のようにUserのIDとGIDを記述する必要があることです。記述しない場合はUID=0,GID=0のrootのみしか使えません。
# syntax = docker/dockerfile-upstream:master-experimental
# 行頭にsyntaxが必要、1.0.2以降であれば使えるようです
~略~
RUN mkdir -p -m 0600 ~/.ssh && \
ssh-keyscan github.com >> ~/.ssh/known_hosts
RUN --mount=type=ssh,uid=1000,gid=1000 cd $HOME_DIR && git clone git@github.com:$USER/$REPOSITORY.git
Build例
DOCKER_BUILDKIT=1
を宣言し、--ssh
を宣言してbuildする必要があります。
$ DOCKER_BUILDKIT=1 docker build --ssh default=~/.ssh/id_rsa .
おわりに
以上で、プライベートリポジトリをgit clone
出来るようになるはずです。