Dockerでbuildしたときにプライベートレポジトリからgo getしたい。
やらなければならないことは3つあります。
- .gitconfigの変更
- 秘密鍵の配置
- .ssh/configの変更
これだけです。
.gitconfigの変更
GithubのプライベートレポジトリやGithubEnterprise等との通信でhttpを使っているとgo get
した時に毎回パスワードを聞かれてしまい、Docker内では失敗してしまいます。
そこでsslの通信に変更します。
変更は.gitconfigで指定します。下記が例です。
.gitconfig
[url "git@ghe.example.org:"]
insteadOf = https://ghe.example.org/
これでssl通信でアクセスするよう変更されます。
秘密鍵の配置
パスワード無しでアクセスするためにsslの通信で使う秘密鍵を配置します。
具体的には/root/.ssh
の中にid_rsa
ファイルを配置し、700の権限を付与します。
秘密鍵の作り方はgithubなどを見て下さい。
.ssh/configの変更
sshで初めて接続する場合、未知のホストからの接続という警告が出てしまいます。
それを回避するためにオプションを設定します。
.ssh/config
StrictHostKeyChecking no
これで警告がでなくなります。
Dockerファイルにすると
これらをDockerファイルにすると
Dockerfile
FROM golang:1.5
RUN mkdir -p /root/.ssh
ADD id_rsa /root/.ssh/id_rsa
RUN chmod 700 /root/.ssh/id_rsa
RUN echo "Host ghe.example.org\n\tStrictHostKeyChecking no\n" >> /root/.ssh/config
RUN echo "[url \"git@ghe.example.org:\"]\n insteadOf = https://ghe.example.org/" >> ~/.gitconfig
RUN go get ghe.example.org/oreno/library/...
もちろんgo get
だけでなくgoのライブラリのgbでも使えました。