docker buildする際にhost側のssh keyを使いつつbuildしたいことがある。
docker run -vなら~/.sshをmountするとかでhost側のssh keyが使えるけど、buildではできなかった。
これがDocker v18.09からできるようになった。(まだexperimental扱いではある)
keyをADDして最後に消す、みたいなワークアラウンドが不要になりそう。
buildkitの有効化
$ export DOCKER_BUILDKIT=1
Dockerfile
# syntax=docker/dockerfile:1.0.0-experimental
FROM ubuntu:18.04
RUN apt-get update
RUN apt-get install -y git
RUN apt-get install -y openssh-client
RUN apt-get install -y ruby
RUN mkdir -p -m 0600 ~/.ssh && ssh-keyscan github.e >> ~/.ssh/known_hosts
RUN --mount=type=ssh git clone git@github.e:org/repo.git
build
$ docker build --ssh default .
- 先頭に
# syntax=docker/dockerfile:1.0.0-experimental
を書くのがポイント - ssh-keyscanでknow_hostsにhost情報を書いとかないと、
Host key verification failed.
で蹴られてしまう - 上記の例だとforward agentを使っている。
hostのssh keyを直接mountする場合
RUN --mount=type=secret,id=ssh,target=/root/.ssh/id_rsa git clone 〜
build
docker build --secret id=ssh,src=$HOME/.ssh/id_rsa .
- これはssh key以外のmountにも使える
参考
- https://medium.com/nttlabs/docker-v18-09-%E6%96%B0%E6%A9%9F%E8%83%BD-%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8%E3%83%93%E3%83%AB%E3%83%89-%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3-9534714c26e2
- https://github.com/moby/buildkit/blob/b5003d53eb522f629c41ad8c48b31c2d6c340afc/frontend/dockerfile/docs/experimental.md