Docker Composeで「file exists at %!s(MISSING), can't create volume there」エラー

既存ファイルに上書きマウントできなくなった・・?

私が確認したのは、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
~

もしくは、そのファイルを格納しているディレクトリごとマウントしてしまうという方法です。ただしこの場合は編集したいファイル以外にそのディレクトリに入っているファイル全てホスト側に持ってくる必要があるので手間ではあります。

他に解決法をご存じの方はコメントください・・。

基本的に-vvolumes指定はディレクトリを指定するものだという指摘もあるかと思いますが、以前のバージョンで使えてたのに非常に残念です。。 将来のバージョンで戻ってくれることを期待しています。

確認したバージョン

  • Docker 1.3.2
  • Docker 1.5.0-dev