問題
Windows10 & Docker for windows & WSLを使用している場合に、
dockerコマンド、または、docker-composeコマンドでvolumeを使用しようとすると、
volumeが正しくマウントされない (ディレクトリだけあってファイルがなかったりする)。
例:
└── src
└── test.go
こんなディレクトリを作成して
docker run -v ./:/go/src/ -it golang
docker run しても
/go# ls -la ./src/
total 8
drwxrwxrwx 2 root root 4096 Apr 6 01:19 .
drwxrwxrwx 4 root root 4096 Apr 6 01:19 ..
ファイルがない
原因
WSL(Windows Subsystem for Linux)が原因でした。
WSLではCドライブが、/cではなく、/mnt/cにマウントされていることが原因で正しく動作しないようです。
(コマンドプロンプトからdockerコマンドを実行すれば正しく動作しました。)
対応策
以下の設定ファイルを作成し、Windowsのリスタートを行います。
※Windowsのバージョンによって対応方法が変わるので詳しくは以下をご確認ください。
https://nickjanetakis.com/blog/setting-up-docker-for-windows-and-wsl-to-work-flawlessly
sudo nano /etc/wsl.conf
# Now make it look like this and save the file when you're done:
[automount]
root = /
options = "metadata"
まとめ
上記の設定でdocker-composeでは、問題なく動作するようになりました。
dockerコマンドでは、相対パスでは相変わらず正しくマウントできませんでしたが、
絶対パスであれば正しくマウントできました。