问题说明:

在使用 docker run 进行文件挂载时, 如果宿主机上本身应挂载的文件不存在, 会导致宿主机上创建了文件名称对应的目录, 并且挂载到了容器中.

例如, 我们需要把宿主机上的 /etc/msmtprc 挂载到容器中. 如果宿主机上不包含该文件, 会导致容器和宿主机上都创建该文件对应的目录
请不要在此讨论、询问为何挂载该文件到容器中

解决办法

容器内操作

容器内需要对挂载的 Volume 进行卸载、删除, 创建对应的文件

  • 容器内进行 Volume 卸载 $ umount /etc/msmtprc/
  • 挂载目录进行删除 $ rmdir /etc/msmtprc/
  • 创建对应的文件. $ touch /etc/msmtprc
  • 写入正确文件内容

宿主机操作

宿主机需要对创建的目录进行删除, 创建对应的文件

  • 挂载目录进行删除 $ rmdir /etc/msmtprc/
  • 创建对应的文件. $ touch /etc/msmtprc
  • 写入正确文件内容

做完如上的修正后, 容器内部有了正确的文件, 可正常挂载时候; 宿主机也有了正确的文件, 不会再次出现错误挂载的问题.

注: 如上解决办法只在容器具有 privileged 时才行