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
并且有效!
当我尝试 运行 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
并且有效!