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


75

我正在尝试创建一个容器来运行程序。我正在使用预配置映像,现在需要运行程序。但是,这是一个机器学习程序,我需要计算机上的数据集才能运行。

该文件太大,无法复制到容器中。最好是在容器中运行的程序搜索了我计算机本地目录中的数据集,但我不知道该怎么做。

有什么办法可以通过某些docker命令来执行此参考吗?还是使用Dockerfile?

Answers:


107

是的,您可以这样做。您所描述的是绑定安装。请参阅https://docs.docker.com/storage/bind-mounts/获取有关此主题的文档。

例如,如果要将文件夹从主目录装入到/mnt/mydata容器中,可以执行以下操作:

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

现在,/mnt/mydata在容器内部将可以访问/Users/andy/mydata我的主机。

请记住,如果您使用的是Mac的Docker或Windows的Docker,默认情况下主机上会允许使用特定目录:

如果在Mac或Windows上使用Docker Machine,则Docker Engine守护程序仅具有对macOS或Windows文件系统的有限访问权限。Docker Machine尝试自动共享您的/ Users(macOS)或C:\ Users(Windows)目录。因此,您可以使用在macOS上挂载文件或目录。

2019年7月更新:

我已经更新了文档链接并命名正确。这些类型的安装架称为“绑定安装架”。有关适用于Mac或Windows的Docker的片段不再出现在文档中,但仍应适用。我不确定为什么他们将其删除(我的Mac版Docker仍然在主机上具有允许的安装路径的明确列表)。


谢谢安迪。但是,当我执行此命令时,是否可以正常访问/ mnt / mydata文件夹中的文件?我可以做cd / mnt / mydata / test之类的事情吗?我按照您说的做了,但是当我在容器的mydata目录中使用ls命令时,没有文件。
gomesh

我认为在这种情况下,您应该在docker run命令和预期结果方面提出一个新问题,因为它现在不在此问题的范围内。确实,它应该如何工作。听起来主机文件夹可能不正确,或者您正在从外部安装某些东西/Users。确保包括Docker版本以及您正在使用的Docker(适用于Windows的Docker等)。
安迪·希恩

3
我认为除非将图像名称放在命令之前,否则您将得到一个错误:docker myimage run -v /Users/andy/mydata:/mnt/mydata
Monica Heddneck

@MonicaHeddneck来自 docker run --helpUsage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
西奥Rubenach

@AndyShinn我认为您是我要找的人,请检查以下问题:security.stackexchange.com/questions/237987/… 正如您所说的,这是与Permission相关的事情,我们如何才能克服这个问题?请回答这个问题。
janu agrawal
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.