これは何?
docker-compose
でWindowsのディレクトリを指定してマウントしようとしてvolumes
辺りでハマった時、同じことを何度か調べた気がするのでメモにしました。
うまくいったりいかなかったりしてるので、フワッとしたことばかり書いています。
「これで大体うまくいくよ~」っていうのがあったら教えてください…。
リスト
- 環境変数
- Shared Drives / Reset credentials
- docker-compose / docker-compose.yamlのバージョン
- ディレクトリの権限
- コンテナ削除
- volume削除
- Docker再起動
- volumesの書き方
環境変数
COMPOSE_CONVERT_WINDOWS_PATHS=1
気になる人は検索してもらえればたくさん出ると思う。
「Docker for Windowsの人はそもそも関係ありません」という記述も見た気がするが、これで直ったという記述も見た気がする。
環境変数いじったら、コマンドラインは立ち上げ直す。
Shared Drives / Reset credentials
Shared
をチェック入れ直してApply
し直したり、Reset credentials
してやり直したりして解決することはある。
docker-compose
/ docker-compose.yaml
のバージョン
とりあえず公式を見て最新にした方が良いとは思う。
ただ、最新を追いすぎても別の何かにハマる可能性は一応あることは頭に入れておく。
ディレクトリの権限
変なことになっていないか見る程度。
コンテナ削除
うまくいかなかったコンテナは消す。
volume
削除
うまくいかなかったvolume
は恐らく残るので消した方が良い。
Docker再起動
これのおかげで直ったパターンはあまり無い気はする。
volumes
の書き方
いろいろ試してみて、うまくいったりすることもあった気がする。
postgres
特有のバグとの合わせ技だったりすることもあって、正直よくわからない。
services:
mysql:
image: mysql
volumes:
- C:\temp:/var/lib/mysql
services:
mysql:
image: mysql
volumes:
- /C/temp/data/mysql:/var/lib/mysql
version: "3.7"
services:
database:
image: postgres:9.6-alpine
volumes:
- database:/var/lib/postgresql/data
volumes:
database:
driver_opts:
type: none
device: /c/temp/data
o: bind
他にもこんな案も見た。
- https://stackoverflow.com/questions/50959475/docker-compose-on-windows-volume-not-working
- https://superuser.com/questions/1051520/docker-windows-container-how-to-mount-a-host-folder-as-data-volume-on-windows
参考にさせて頂いたもの
- [docker compose volume mounts not work on Windows #4303]
(https://github.com/docker/compose/issues/4303) - Docker for Windowsでpostgresのデータマウントができない人へ