docker build 時に 1Password の SSH agent をマウントして プライベートリポジトリを git pull できるようにする

dockergolang

docker build 時にコンテナ内から SSH 通信するのに、秘密鍵を secret としてマウントしたりする方法があるが、1Password などの SSH agent を用いている場合もある。 –ssh で SSH Agent のソケットや鍵を指定すると Dockerfile ではその辺りの違いを意識することなく SSH 通信できる。

Buildkitとは - sambaiz-net

デフォルトで SSH_AUTH_SOCK が参照される。

$ export SSH_AUTH_SOCK="${HOME}/Library/Group Containers/2BUA8C4S2C.com.1password/t/agent.sock"
$ docker build --ssh default .

あとは –mount=type=ssh すればホストと同様にSSHでプライベートリポジトリを clone できる。

FROM ubuntu

RUN apt-get update && apt-get install -y git

RUN mkdir -p /root/.ssh && echo "StrictHostKeyChecking no" > /root/.ssh/config
RUN --mount=type=ssh git clone [email protected]:sambaiz/privaterepo.git

同様に go get もできる。

FROM golang:1.21

ENV GOPRIVATE github.com/sambaiz/privaterepo

RUN mkdir -p /root/.ssh && echo "StrictHostKeyChecking no" > /root/.ssh/config && \
    echo "[url \"[email protected]:\"]\n\tinsteadOf = https://github.com/" > /root/.gitconfig

COPY . app
WORKDIR app

RUN --mount=type=ssh go mod init app && go get github.com/sambaiz/privaterepo