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