根据官方文档,带有 WiredTiger 的 MongoDB 应该在带有 XFS 文件系统的 Linux 上运行。然而,mongo 的官方 docker 镜像使用 ext4,这意味着每当我们启动容器时都会收到警告:
Using the XFS filesystem is strongly recommended with the WiredTiger storage engine. See http://dochub.mongodb.org/core/prodnotes-filesystem"
那么为什么官方的docker镜像不使用XFS呢?这是一个可以忽略不计的问题吗?
完整答案。
docker 镜像没有文件系统。docker 镜像是一堆
tar
文件,每个文件代表一个层,加上一些带有镜像元数据的 JSON 文件。当 docker 镜像被拉入主机时,这些文件将被解压到主机文件系统中,通常位于/var/lib/docker
. 当 docker 容器启动时,这些层使用 OverlayFS 安装在容器内,OverlayFS 是一个联合 FS,允许将不同的文件系统子目录与不同的映像层组合到单个虚拟文件系统中。如果存在卷,那么它们是绑定安装的并且位于容器内,您会将它们视为主机上的原始文件系统/var/lib/docker
(除非tmpfs
使用)。因此,图像作者无法控制它将在哪个 FS 上运行。
XFS
如果您想在容器内使用特定的文件系统,则可以在使用该 FS 的系统上运行它/var/lib/docker
,或者将单独的 FS 绑定安装到容器中。不适用于 Mac 或 Windows,因为这些系统上的 Docker Desktop 使用内部虚拟机来运行容器,并且我认为无法修改该虚拟机的 FS。