💨

docker-composeのvolumesはlong syntaxで書くのがおすすめ

2022/10/13に公開

要約

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