windows10 home 上でdockerを使いローカル開発環境を作ろうとしていろいろはまった。homeなのでDocker for Windows(Hyper-Vを使うやつ)は使えないので、Docker Toolbox のwindows版を使うことにした。cenosをdockerホストにして少しだけdockerの勉強はしていたが、windowsだとなにかと問題があったりする。
Docker Toolbox
- https://docs.docker.com/toolbox/overview/
webサーバー立てる
まずは、nginxでwebサーバーを構築しようとdocker-composeを使いdocker-compose.ymlを作成
docker-compose.yml
nginx-proxy:
image: jwilder/nginx-proxy
container_name: nginx-proxy
privileged: true
ports:
- 80:80
- 443:443
volumes:
- ./docker-compose.d/certs:/etc/nginx/certs:ro
- ./docker-compose.d/htpasswd:/etc/nginx/htpasswd
- /etc/nginx/vhost.d
- /usr/share/nginx/html
- /var/run/docker.sock:/tmp/docker.sock:ro
restart: always
docker-compose up -d を実行すると下記のエラー
ERROR: for nginx-proxy Cannot create container for service nginx-proxy: invalid bind mount spec "C:\\Users\\hoge\\docker\\docker-compose.d\\htpasswd:/etc/nginx/htpasswd:rw": invalid volume specification: 'C:\Users\hoge\docker\docker-compose.d\htpasswd:/etc/nginx/htpasswd:rw'
[31mERROR[0m: Encountered errors while bringing up the project.
google翻訳すると
* 無効なバインドマウント仕様
* 無効なボリューム指定
いやいやDocker Toolboxのdocker-machineでは、winのローカルのC:\Userと
docker-machine(VirtualBox)の/c/Userがファイル共有されマウント済みであるはず
絶対パスで指定してみる
volumes:
- /c/Users/hoge/docker/docker-compose.d/certs:/etc/nginx/certs:ro
- /c/Users/hoge/docker/docker-compose.d/htpasswd:/etc/nginx/htpasswd
- /etc/nginx/vhost.d
- /usr/share/nginx/html
- /var/run/docker.sock:/tmp/docker.sock:ro
ERROR: for nginx-proxy Cannot create container for service nginx-proxy: create \c\Users\hoge\docker\docker-compose.d\htpasswd: "\\c\\Users\\hoge\\docker\\docker-compose.d\\htpasswd" includes invalid characters for a local volume name, only "[a-zA-Z0-9][a-zA-Z0-9_.-]" are allowed. If you intented to pass a host directory, use absolute path
[31mERROR[0m: Encountered errors while bringing up the project.
google翻訳すると
* ローカルボリューム名に無効な文字が含まれています
いろいろ検索して調査
https://github.com/docker/compose/blob/master/CHANGELOG.md#190-2016-11-16
1.9.0 (2016-11-16)
- Breaking changes
WindowsでDocker Toolbox / Machineを使用して作成する場合、デフォルトでボリュームパスはC:\ Usersから/ c / Users-styleに変換されなくなりました。 この変換を再度有効にしてボリュームが機能し続けるようにするには、環境変数COMPOSE_CONVERT_WINDOWS_PATHS = 1を設定します。 Docker for Windowsのユーザーは影響を受けず、変数を設定する必要はありません。
とのことです。
環境変数を設定
変数名(N): COMPOSE_CONVERT_WINDOWS_PATHS
変数値(V): 1
これで、絶対パスでなくても起動できた。docker-machineに問題あると調査していてはまった。
まさかdocker-composeの問題とは