💨
docker-composeのvolumesはlong syntaxで書くのがおすすめ
要約
no good.(short syntax)
volumes:
- "./api:/go/src/app"
good.(long syntax)
volumes:
- type: bind
source: ./api
target: /go/src/app
※docker-composeファイルバージョン3.2
以降で有効です。
なぜか
どっちがsourceでどっちがtargetだかわかんなくならないですか。僕はなります。
などと書いていたら、こちらの記事でめちゃくちゃ詳しくご説明いただいていました。
shortとlongではコンテナ生成時の挙動が異なり、long syntaxの方がふるまいが素直(裏で余計なことをしない)で、不手際があった場合のアプローチがやりやすいそうです。
記述した「ホスト側」のファイル/ディレクトリが存在しなかった場合に、short syntaxの場合はDockerが勝手にホスト側にディレクトリを作ってしまうという仕様が存在し、
- 勝手にroot権限(Dockerの実行ユーザ)でホストにディレクトリが作られる
- ファイルをマウントしようとしたのにディレクトリがマウントされたりする
- そもそも
docker-compose up
でエラーを吐かない
といったややこしい状況が生まれるリスクをはらんでいるとのことでした。気をつけます!
ではまた!
Discussion