🖥
#docker の volume と mount の基本が分からない ( docker run であそぼ )
今さらながら分かってなかった。
だいたい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
チャットメンバー募集
何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。
公開日時
2019-11-18
Discussion