起こった事象
ある日、DockerでGoの開発を行っていた時に、Live Reload用に「gin」というパッケージをインストールして使っていました。
別の日に別のPCから開発をする必要があったため、事前にDockerfileを以下のように書き換えておきました。
FROM golang:1.18.1-alpine3.15
WORKDIR /go/app/
RUN apk update \
&& export GO111MODULE=suto
COPY ./app/ .
RUN go mod tidy \
&& go install github.com/codegangsta/gin
# go mod tidyを実行するとコードで使用されているパッケージのみがgo.mod/go.sumに反映されるため、
# go mod tidy実行後にginのインストールを行っている
EXPOSE 8080
CMD ["gin", "--immediate", "run", "main.go", "0.0.0.0:8080"]
そして後日、別PCからdocker runしたところ下記のようなエラーが...
ERROR: for app Cannot start service app:
OCI runtime create failed:
container_linux.go:380:
starting container process caused: exec: "gin": executable file not found in $PATH: unknown
「ginというコマンドが見つからない」と言われていますが、自分の中ではDockerfileの中で確かにインストールしていたはず...
解決方法
「go install」を使う場合は、バージョンの指定も必須 だったようです。
そのためDockerfileを下記のように修正しなおしました。
RUN go mod tidy \
&& go install github.com/codegangsta/gin
↓
RUN go mod tidy \
&& go install github.com/codegangsta/gin@latest
特別バージョンの指定をしたいわけではない場合には、@latest
を付ければ問題ないようです。
上記にてとりあえずのところエラーは解決しました。