web-dev-qa-db-ja.com

Docker-既存のファイルの上にボリュームをマウントできません、ファイルが存在します

Dockerでアプリケーションのデータコンテナーを構築しようとしています。このコマンドを実行して、いくつかのボリュームを公開します。

docker run --name svenv.nl-data -v /etc/environment -v /etc/ssl/certs -v /var/lib/mysql -d svenv/svenv.nl-data

問題は、このコマンドからこのエラーが発生することです。

Error response from daemon: cannot mount volume over existing file, file exists /var/lib/docker/aufs/mnt/aefa66cf55357e2e1e4f84c2d4d2d03fa2375c8900fe3c0e1e6bc02f13e54d05/etc/environment

Dockerのドキュメントを正しく理解している場合。単一ファイルのボリュームの作成がサポートされています。したがって、このエラーが発生する理由がわかりません。

これを私に説明できる人はいますか? Ubuntu 14.04でDocker 1.9.1を実行しています。

15

あなたは使うべきです:

-v /etc/environment:/etc/environment

の代わりに:

-v /etc/environment

前者は、コンテナーボリュームをホストボリュームにマップします。後者は/etc/environmentに新しいボリュームを作成しようとしますが、このディレクトリがすでに存在するため失敗します。

9
dr.scre

あなたがLinuxの下にいると仮定して、次のコードを実行してください

docker run -it --rm -v /local_dir:/image_root_dir/mount_dir image_name

詳細は次のとおりです。

-it: interactive terminal 
--rm: remove container after exit the container
-v: volume or say mount your local directory to a volume

マウント機能はイメージのディレクトリを「カバー」するため、常にイメージのルートディレクトリの下に新しいディレクトリを作成する必要があります。

詳細については、公式ドキュメント se bind mounts をご覧ください。

0
hikaru89

ファイルをマウントするのではなく、代わりにマウントを宣言しているからでしょう。代わりにこの表記を試してください:-v <full path to a file you want to overwrite the target with>:/etc/environment

0
Mykola Gurov