Posted at

Goでアプリケーションを書く場合のDockerfile内ではGOPATHを意識する #golang

More than 1 year has passed since last update.

golangで書いたアプリケーションをDocker化するときに、Dockerfile内で適当にWORKDIRを選んだらエラーになりました。


Sample repository

https://github.com/m-nakamura145/golang-docker-compose-sample


Dockerfile

最初に何も考えずに以下のように書いたら、コンテナ内でmain package から entity packageが読み込めなくなりました。

WORKDIR /go/src/app

ADD . /go/src/app

これは、 main.goのimportが github.com/m-nakamura145/golang-docker-compose-sample/entity というpathになっており、コンテナ内の$GOPATH(/go) では解決できない場所に実際のファイルが置かれていることが原因でした。

以下のように、$GOPATH を意識して正しいpathでWORKDIRを設定すれば解決しました。

WORKDIR /go/src/github.com/m-nakamura145/golang-docker-compose-sample

ADD . /go/src/github.com/m-nakamura145/golang-docker-compose-sample