🖥

#docker の volume と mount の基本が分からない ( docker run であそぼ )

2019/11/18に公開

今さらながら分かってなかった。
だいたいdocker-compose とかでやっちゃうじゃないですか、はい。

環境はdocker for mac

まとめ

  • -v host:guest で volume を指定する
  • host の指定方法によって

docker volume

  • docker volume を -v host:guest で指定する
  • カレントディレクトリをマウントしようとしても、そうはならない様子
$ docker run --rm --name alpine-volumed -v foo:/bar -it alpine ash
/ # echo "ABC" > /bar/abc.txt
/ # exit
$ docker run --rm --name alpine-volumed -v foo:/bar -it alpine ash
/ # cat /bar/abc.txt
ABC

docker inspect

  • host側の絶対パスを指定しなかった場合は、docker的などこかにマウントされてそう
$ docker volume inspect foo
[
    {
        "CreatedAt": "2019-11-18T04:56:31Z",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/foo/_data",
        "Name": "foo",
        "Options": null,
        "Scope": "local"
    }
]

Host にはそんなディレクトリないってさ
部活やめるってさ

$ ls /var/lib/docker/volumes/foo/_data
ls: /var/lib/docker/volumes/foo/_data: No such file or directory

Hostのディレクトリにマウントする

Host にディレクトリ作成しておく

$ mkdir -p ~/foo
$ cd ~/foo
$ pwd
/Users/yumainaura/foo
  • Host の絶対パス /Users/yumainaura/foo を docker container の /bar/ にマウントする
  • docker container でマウントディレクトリにファイルを作成する
$ docker run --rm --name alpine-volumed-on-host -v /Users/yumainaura/foo:/bar -it alpine ash
/ # echo "XYZ" > /bar/xyz.txt

Hostにファイルが作成されていいる

$ cat ~/foo/xyz.txt
XYZ

チルダでのパス省略指定 - Hostでエイリアスされているディレクトリ

駄目だろうと思い Docker for Mac で試したところ、こちらもいけるようだ

$ docker run --rm --name alpine-volumed-on-host -v ~/foo:/bar -it alpine ash
/ # echo "CTO" > /bar/cto.txt
$ cat ~/foo/cto.txt
CTO

参考

【Docker】Dockerでホストのディレクトリをマウントする - Qiita

Original by Github issue

https://github.com/YumaInaura/YumaInaura/issues/2737

チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ

Twitter

https://twitter.com/YumaInaura

公開日時

2019-11-18

Discussion