Docker 位于 /tmp 的卷 OSX 为空

Docker volume located in /tmp on OSX empty

当我尝试 运行 OSX 上的容器(在 Parallels VM 上使用 docker-机器)并安装位于 /tmp 中的卷时,该卷似乎空.

> mkdir -p /tmp/foo/bar
> docker run -ti -v /tmp/foo:/foo ubuntu ls /foo

我希望看到它列出 bar,但是它是空的。这有效:

> mkdir -p /Users/myuser/tmp/foo/bar
> docker run -ti -v /Users/myuser/tmp/foo:/foo ubuntu ls /foo
bar

mktemp 创建的文件夹也是如此,最终在 /folders 中。如何让 docker 正确挂载这些文件夹?

这是一个众所周知的问题。 这背后的原因与 VM 相关联,当它被创建时,它会将文件夹安装在您的用户目录中,这使其成为容器唯一可用的文件夹。 这是类似的问题 https://github.com/docker/kitematic/issues/1192

作为解决方法,您只需将所需位置添加到底层 VirtualBox 机器即可。如果您的 docker 机器是 default 并且您希望能够装载外部卷,您可以使用:

VBoxManager sharedfolder add default --name Volumes --hostpath /Volumes --automount

之后,docker run -v /Volumes/Data:/mnt/Data ls /mnt/Data就可以了。

现在是 2022 年,我发现自己处于同样的境地。可能有用的其他信息是:/tmp -> /private/tmp 是一个可能导致问题的符号链接 (OSX)。在卷中的 docker run 命令中,我将 /tmp 替换为 /private/tmp 并且有效!