linux - 在 Docker 中的卷之间移动文件很慢

标签 linux docker docker-compose

我正在以这种方式安装两个卷:

    volumes:
      - /home/username/videos:/var/www/symfony/ftp
      - .docker/data/uploads/videos:/var/www/symfony/public/uploads/videos

主机上的两个文件夹都在同一个分区上。如果我在主机上为 /home/username/videos.docker/data/uploads/videos 之间的文件运行 mv,它基本上是即时的.但是,如果我在 var/www/symfony/ftp/var/www/symfony/public/uploads/videos 之间运行 mv,那会很痛苦慢。

基本上,它似乎正在复制文件,就好像它是两个完全不同的物理驱动器一样。主机运行 Ubuntu 20.04,Docker 镜像 Alpine 3.13。

这种行为是预期的吗?如果可能的话,我知道如何改进它吗? (除了将两个文件夹放在同一卷上)

最佳答案

Linux 在幕后将这些主机挂载实现为两个单独的绑定(bind)挂载到容器的挂载命名空间中。当您运行 mv 时,它会检查是否可以在文件系统相同时进行简单的重命名。不幸的是,当您遇到绑定(bind)安装时 linux treats these as separate filesystems即使绑定(bind)挂载的底层文件系统相同。

关于linux - 在 Docker 中的卷之间移动文件很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67592916/

相关文章:

linux - 数据通过 TCP/IP 堆栈的传输时间 (Linux)

c - 如何在我的代码中使用 CPLEX 时间限制?

apache-spark - 通过Docker Compose将Spark Master连接到Spark Slave

azure - 如何为 Azure 容器实例设置 FQDN

具有多容器部署的Azure应用服务暴露了错误的服务

从多线程程序调用 system()

linux - 如何查找导入的 pgp key 的到期日期

node.js - NPM 在 docker 容器中升级后中断

c# - 如何在Docker Compose中等待MSSQL?

docker - 我尝试在 docker 中部署 gRPC (go) 服务器并在本地端口中公开端口,但端口绑定(bind)不起作用