概要
vagrantでdockerを使い始めて、データの永続化のためにボリュームを使うと
ホストのフォルダに書き込めなくて、パーミッションエラーによく悩まされたので
忘れないようメモを残す。
パーミッションエラーになるパターン
よく見かけるボリュームの作り方
docker-compose.yml
version: "2"
services:
database:
image: mysql
volumes:
- /home/vagrant/opt/mysql:/var/lib/mysql
busyboxを使った作り方
docker-compose.yml
app:
image: busybox
container_name: app
volumes:
- /home/vagrant/opt/mysql:/var/lib/mysql
mysql:
image: mysql
container_name: mysql
environment:
MYSQL_ROOT_PASSWORD: password
ports:
- "3306:3306"
volumes_from:
- app
パーミッションエラーにならないパターン
「/var/lib/docker/volumes/mysql-db」フォルダに永続化される
※ ただし、「docker-compose down -v」されるとボリュームも削除されるので注意!
トップレベルにvolumes:を置いてボリュームの定義する
docker-compose.yml
version: "2"
services:
mysql:
image: mysql
volumes:
- mysql-db:/var/lib/mysql
volumes:
mysql-db:
driver: local
トップレベルにvolumes:を置いてボリュームの定義する(2)
「/home/vagrant/docker/data/mysql」フォルダに永続化される
※ ただし、ホストの通常ユーザーではアクセスできないパーミッションなので、
操作するときは「sudo su -」とかで、rootになる。
docker-compose.yml
version: "2"
services:
mysql:
image: mysql
volumes:
- mysql-db:/var/lib/mysql
volumes:
mysql-db:
driver_opts:
type: none
device: /home/vagrant/docker/data/mysql
o: bind