💨

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

2022/10/13に公開約700字

要約

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以降で有効です。

https://docs.docker.jp/compose/compose-file/compose-file-v3.html#id20

なぜか

どっちがsourceでどっちがtargetだかわかんなくならないですか。僕はなります。


などと書いていたら、こちらの記事でめちゃくちゃ詳しくご説明いただいていました。

https://zenn.dev/sarisia/articles/0c1db052d09921

shortとlongではコンテナ生成時の挙動が異なり、long syntaxの方がふるまいが素直(裏で余計なことをしない)で、不手際があった場合のアプローチがやりやすいそうです。

記述した「ホスト側」のファイル/ディレクトリが存在しなかった場合に、short syntaxの場合はDockerが勝手にホスト側にディレクトリを作ってしまうという仕様が存在し、

  • 勝手にroot権限(Dockerの実行ユーザ)でホストにディレクトリが作られる
  • ファイルをマウントしようとしたのにディレクトリがマウントされたりする
  • そもそもdocker-compose upでエラーを吐かない

といったややこしい状況が生まれるリスクをはらんでいるとのことでした。気をつけます!

ではまた!

Discussion

ログインするとコメントできます