如何在容器上使用本地文件?

我尝试创建一个容器来运行一个程序。我正在使用一个预配置图像,现在我需要运行该程序。然而,这是一个机器学习程序,我需要从我的电脑数据集运行。

文件太大,无法复制到容器中。如果在容器中运行的程序在我的计算机的本地目录中搜索数据集,那将是最好的,但我不知道如何才能做到这一点。

有没有什么方法可以用一些 Docker 命令来做这个引用? 或者使用 Dockerfile?

131734 次浏览

是的,您可以这样做。您所描述的是一个绑定挂载。有关这个主题的文档,请参阅 https://docs.docker.com/storage/bind-mounts/

例如,如果我想从主目录中将一个文件夹挂载到容器中的 /mnt/mydata中,我可以这样做:

docker run -v /Users/andy/mydata:/mnt/mydata myimage

Now, /mnt/mydata inside the container will have access to /Users/andy/mydata on my host.

Keep in mind, if you are using Docker for Mac or Docker for Windows there are specific directories on the host that are allowed by default:

如果在 Mac 或 Windows 上使用 Docker Machine,则 Docker Engine 守护进程对 macOS 或 Windows 文件系统的访问受到限制。Docker Machine 尝试自动共享您的/Users (macOS)或 C: Users (Windows)目录。因此,您可以使用以下命令在 macOS 上挂载文件或目录。

2019年7月更新:

我已经更新了文档链接和正确的命名。这种类型的挂载被称为“绑定挂载”。有关 Docker for Mac 或 Windows 的代码片段不再出现在文档中,但应该仍然适用。我不知道他们为什么删除它(我的 Docker for Mac 仍然有一个明确的允许在主机上挂载路径的列表)。