既存ファイルに上書きマウントできなくなった・・?
私が確認したのは、Dockerバージョン1.3.2でうまくビルドできていたDockerfileが、バージョン1.5.0では「file exists at %!s(MISSING), can't create volume there」というエラーが出てビルドに失敗するというものでした。
いろいろ試したり調べたのですがこのエラーの情報がほとんど無く、結果分かったことは、ボリュームをマウントする際にゲスト側に既にあるファイルにマウントしてしまうとエラーになってしまう仕様になったようです。(ディレクトリは既にあろうとも問題なくマウントできるのですが・・)
nginx:
build: Dockerfiles/nginx
ports:
- "80"
- "443"
volumes:
- .:/opt
- ./nginx.conf:/etc/nginx/nginx.conf
restart: always
どうしたら・・・
とりあえず、Dockerfile側で該当のファイルをrmで先にそのファイルを削除してしまうようにするのが手っ取り早いかと思います。
~ RUN rm -fr /etc/nginx/nginx.conf ~
もしくは、そのファイルを格納しているディレクトリごとマウントしてしまうという方法です。ただしこの場合は編集したいファイル以外にそのディレクトリに入っているファイル全てホスト側に持ってくる必要があるので手間ではあります。
他に解決法をご存じの方はコメントください・・。
基本的に-vやvolumes指定はディレクトリを指定するものだという指摘もあるかと思いますが、以前のバージョンで使えてたのに非常に残念です。。
将来のバージョンで戻ってくれることを期待しています。
確認したバージョン
- Docker 1.3.2
- Docker 1.5.0-dev