18

我正在尝试在 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。

4

5 回答 5

11

你应该使用:

-v /etc/environment:/etc/environment

代替:

-v /etc/environment

前者将容器卷映射到主机卷。后者尝试在 处创建一个新卷,但/etc/environment由于该目录已经存在而失败。

于 2016-03-10T14:35:38.650 回答
0

对我来说,解决方案是删除图像并重建。不是一个好的解决方案,但它对我有用。

于 2022-01-04T17:26:05.090 回答
0

cannot mount volume over existing file也可能意味着您正在尝试将主机中的文件挂载到容器中的文件,这是一个逻辑错误。

如果是这样,请将容器中的文件包装在一个文件夹中并挂载该文件夹而不是文件。

于 2021-09-01T17:55:56.040 回答
0

我猜是因为您没有挂载文件,而是声明了挂载。试试这个符号:-v <full path to a file you want to overwrite the target with>:/etc/environment

于 2015-11-25T21:59:44.530 回答
0

假设你在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

由于挂载功能将“覆盖”图像中的目录,因此您应该始终在图像根目录下创建一个新目录。

访问官方文档使用绑定挂载获取更多信息。

于 2018-03-22T14:33:16.300 回答