みーのぺーじ

みーが趣味でやっているPCやソフトウェアについて.Python, Javascript, Processing, Unityなど.

docker-composeのvolumesのパス指定の整理

docker-composeでvolumesを指定するとき,ホストとコンテナのパスがどうなるかをあれこれ考えるとややこしいので,整理します.また,検索しても古い情報が出てくるので,現時点で最新のversion 3を使用します.

公式ドキュメントに詳しく書いてあります.

Compose file version 3 reference | Docker Documentation

sourceとtarget

services:
  web:
    image: nginx
    volumes:
      - type: volume
        source: mydata
        target: /data
volumes:
  mydata:

sourceはホスト側で,targetはコンテナ側です.mydataはvolumeの名前で,パスではありません."/"から開始すると,絶対パスとなります.

絶対パスではホストの環境が変わった時に動かなくなるため,相対パスを指定するのが便利です.相対パスはdocker-composeのymlファイルが基準となります.このため,ホストの環境が変わっても問題ないですが,プロジェクト内でのymlファイルの場所を変更する時は修正が必要になります.

いつも上記の例のように記載するのは面倒なので,短い表記法があります.[SOURCE:]TARGET[:MODE]と指定します.例えば,以下で,sourceの./dataディレクトリとtargetの/tmp/dataディレクトリを指定します.

  volumes:
    - ./data:/tmp/data

$PWDは不要だと思う.

検索すると$(PWD)をカレントディレクトリ指定のために用いる方法が紹介されているサイトがあります*1.docker-composeで相対パスが使用できるため,わざわざ$PWDを指定する必要はないのではないかと感じます.