kikukawa's diary

都内で活動するシステムエンジニアが書いてます。 興味を持った技術やハマったポイント、自分用メモをつけてます。 最近はweb中心

Docker内でGithubのプライベートリポジトリのdepを解決する

goのパッケージ管理ツールのdepに 自作のプライベートリポジトリを登録している状態で Docker上で、dep ensureすると Githubの認証に弾かれます。 それを解決する方法です。

基本的には dep公式のFAQに書いてある通りです。 depは、 .netrc を頼りにGithubの認証を解決するので、これをDockerfileで作って上げます。 ただ、FAQに書かれているフォーマットは

machine github.com
    login [YOUR_GITHUB_USERNAME]
    password [YOUR_GITHUB_TOKEN]

ですが、これだとうまく行かなかったので

machine github.com
    login [YOUR_GITHUB_TOKEN]

という形にしています。

Dockerfileはこんな感じになります

FROM golang:alpine

RUN apk --update add tzdata git && \
    : "depのインストール" \
    mkdir -p $$GOPATH/bin && \
    go get github.com/golang/dep/cmd/dep

ADD . /go/src/github.com/foo/bar
WORKDIR /go/src/github.com/foo/bar

EXPOSE 8080

CMD  echo machine github.com > /root/.netrc && \
     echo login [YOUR_GITHUB_TOKEN] >> /root/.netrc && \
     dep ensure -vendor-only

生成するGithubトークンのパーミッションは、 repo にだけチェックがついてれば十分です。