こんにちは。KOUKIです。
Swaggerを使おうとして、下記のエラーに悩まされました。
1 2 3 4 |
$ swagger generate spec -o ./swagger.jsonerr : exit status 1: stderr: failed to initialize build cache at /.cache/go-build: mkdir /.cache: permission denied |
このエラーの解決策を記述します。
<目次>
環境
- MAC
- Docker
- Swagger(docker image latest)
何をしたのか
公式サイトを参考にDockerでswaggerを利用しようとしました。
1 2 |
docker pull quay.io/goswagger/swagger alias swagger="docker run --rm -it --user $(id -u):$(id -g) -e GOPATH=$HOME/go:/go -v $HOME:$HOME -w $(pwd) quay.io/goswagger/swagger" |
そして、下記のコマンドを押下したところ、表題のエラーが発生したというわけです。
1 2 3 |
$ swagger generate spec -o ./swagger.jsonerr : exit status 1: stderr: failed to initialize build cache at /.cache/go-build: mkdir /.cache: permission denied |
解決策
dockerが操作しようとしている「.cache」フォルダはHOME配下にあるフォルダです。このフォルダにはdockerではアクセスできないようです。
しかし、便利なことに「XDG_CACHE_HOME」に書き込み権限があるフォルダやファイルを指定するとこの現象を回避できます。
XDG_CACHE_HOMEは環境変数であり、freedesktop.orgという規格に準拠したアプリケーションはこの環境変数に指定されたパスをキャッシュとして利用するようになるらしいです。
1 2 |
# 修正後のaliasコマンド alias swagger="docker run --rm -it --user $(id -u):$(id -g) -e XDG_CACHE_HOME=/tmp/.cache -e GOPATH=$HOME/go:/go -v $HOME:$HOME -w $(pwd) quay.io/goswagger/swagger |
キャッシュのパスを/tmp/.cacheにしました。私の環境ではこれで解決しました。
まとめ
dockerはとても便利ですが、こういう時には若干不便を感じますね^^;
プログラミングをしているとエラーばかりで、中々前に進まない時があります。
そうした時は一旦席から離れて、周囲を散歩しつつ、コーヒーブレイクを入れると結構いい感じで解決することがあるので、ぜひ試してください^^
swaggerは、OpenAPIとも呼ばれており、プログラミングコードやdocumentの自動生成ができるみたいなので、これから積極的に使っていきたいです!
それでは、また!
コメントを残す
コメントを投稿するにはログインしてください。