我们正在Docker中创建一个标准的“数据科学”映像,以帮助我们的团队维护一个一致的环境。为了使这对我们有用,我们需要容器具有对公司网络的读/写访问权限。如何将网络驱动器安装到Docker容器?
以下是我使用Docker Hub中的rocker/rstudio映像所做的尝试:
这是可行的:docker run -d -p 8787:8787 -v //c/users/{insert user}:/home/rstudio/foobar rocker/rstudio
这不起作用(其中P是网络驱动器的Map位置):docker run -d -p 8787:8787 -v //p:/home/rstudio/foobar rocker/rstudio
这也行不通:docker run -d -p 8787:8787 -v //10.1.11.###/projects:/home/rstudio/foobar rocker/rstudio
有什么建议吗?
我对Docker比较陌生,所以如果我不完全清楚,请让我知道。
5条答案
按热度按时间a14dhokn1#
我知道这是相对较老的-但为了其他人-这里是什么通常为我工作。使用-我们使用一个windows文件服务器,所以我们使用cifs-utils,以Map驱动器。我假设下面的指令可以适用于nfs或其他任何东西。
first -需要在特权模式下运行容器,以便可以在容器内挂载远程文件夹(可能不需要
--dns
标志)docker run --dns <company dns ip> -p 8000:80 --privileged -it <container name and tag>
现在(假设Centos具有CIFS并且是容器中的根)-跳到容器中并且运行:
安装cifs-utils(如果尚未安装)
yum -y install cifs-utils
创建要Map的本地目录
mkdir /mnt/my-mounted-folder
准备一个包含用户名和凭据文件
echo "username=<username-with-access-to-shared-drive>" > ~/.smbcredentials
echo "password=<password>" > ~/.smbcredentials
Map远程文件夹
mount <remote-shared-folder> <my-local-mounted-folder> -t cifs -o iocharset=utf8,credentials=/root/.smbcredentials,file_mode=0777,dir_mode=0777,uid=1000,gid=1000,cache=strict
现在您应该可以访问
希望这对你有帮助..
wr98u20j2#
我会写我的决定。我有一个Synology NAS。共享文件夹使用smb协议。我设法以以下方式连接它。最重要的是写版本1.0(vers=1.0)。没有它它它不工作!我试图解决这个问题2天。
fiei3ece3#
我一直在寻找解决方案的最后几天,我只是得到一个工作。
我在一个ubuntu虚拟机上运行docker容器,我在同一个网络上运行windows 10的其他主机上Map一个文件夹,但我几乎可以肯定容器运行的操作系统没有问题,因为Map是从容器本身开始的,所以我认为这个解决方案应该在任何SO中工作。
我们来编码吧。
首先应创建卷
然后你必须从一个图像运行一个容器
在此之后,一个容器将与分配给它的卷一起运行,并被Map到。您在其中任何一个文件夹中创建某个文件,该文件将自动复制到另一个文件夹。
如果有人想从docker-compose运行这个,我把它放在这里
希望我能帮上忙
mzmfm0qo4#
加上@Ал ександр Рубл ев的解决方案,我解决这个问题的诀窍是重新配置Synology NAS以接受docker使用的SMB版本。
yftpprvb5#
我知道这是旧的,但我发现这是在寻找类似的东西,但看到它是接收其他人的评论,如我自己,谁找到它。我已经想出了如何让这个工作为一个类似的情况,我花了一段时间才想出。这里的答案是失踪的一些关键信息,我将包括在内,可能是因为他们当时没有可用
1.我认为CIFS存储仅适用于连接到Windows系统时,因为我认为Linux根本不会使用它,除非该系统模拟Windows环境。
您可以使用与CIFS卷类似的方式创建NFS卷,只是需要做一些更改。
在*WSL 2*上使用NFS时,您首先需要将NFS服务安装到Linux主机操作系统中。我认为CIFS需要类似的服务,很可能是@LevHaikin提到的
cifs-utils
,但由于我不使用它,因此我不确定。在我的情况下,主机操作系统是Ubuntu,但是您应该能够通过查找系统的nfs-common
(或cifs-utils
,如果这是正确的话)安装的等效项来找到合适的安装就是这样。这将安装服务,使NFS在Docker上工作(我花了很长时间才意识到这是问题所在,因为它似乎没有被提到需要任何地方)
如果使用NFS,在网络设备上,你需要为NFS文件夹设置NFS权限,在我的例子中,这将在
folder
文件夹中完成,然后挂载到其中的一个文件夹。(在我的例子中,作为服务器的NAS安装到#IP#/volume1/folder
,在NAS中,我从未在目录结构中看到volume1
,但是当我设置NFS权限时,共享文件夹完整路径显示在设置页面中。我没有包括volume1
部分,因为您的系统可能会有所不同)&您需要IP后的完整路径(使用IP作为编号***而不是***主机名),根据您的NFS共享,无论它是什么。如果使用CIFS设备,则仅CIFS权限也是如此。
nolock
选项经常需要,但可能不在您的系统上。它只是禁用“锁定”文件的功能。soft
选项意味着如果系统无法连接到挂载目录,它将不会挂起。如果您需要它只在挂载目录存在时才工作,您可以将其改为hard
。rw
(读/写)选项用于***读/写***,ro
(只读)用于***只读***由于我个人并不使用CIFS卷,因此设置的选项只是我找到的示例中的选项,您是否需要这些选项还需要进一步研究。
username
和password
***是***必需的,并且***必须***包括在CIFS中uid
和gid
是Linux用户和组设置,我认为应该设置为您的容器所需要的,因为据我所知,Windows不使用它们file_mode=0777
和dir_mode=0777
是Linux读/写权限,本质上与chmod 0777
类似,提供可以访问文件的任何内容的读/写/执行权限(详细信息链接#4)&这也适用于Docker容器,而不是CIFS主机noexec
与执行权限有关,但我不认为它在这里实际上起作用,但我发现它包含在大多数示例中,nosuid
限制了它访问特定于特定用户ID的文件的能力,除非您知道您需要它,否则不应删除它,因为它是一种保护,我建议尽可能保留它,nosetuids
意味着它不会为新创建的文件设置UID和GUID,nodev
意味着无法访问/创建装载点上的设备,vers=1.0
我认为是兼容性的一个备用选项,我个人不会包含它,除非有问题或没有它就无法工作在这些示例中,我以读/写模式将
//NET.WORK.DRIVE.IP/folder/on/addr/device
装载到名为“my-docker-volume
“的卷。CIFS卷使用用户supercool
和密码noboDyCanGue55
NFS通过CLI
CIFS从CLI(如果Docker安装在Windows以外的系统上,则可能无法工作,只能连接到Windows系统上的IP)
这也可以在Docker Compose或Portainer中完成。当您在那里完成时,您需要在合成文件的底部添加一个
Volumes:
,没有缩进,与services:
处于同一级别在此示例中,我将装载卷
my-nfs-volume
从//10.11.12.13/folder/on/NFS/device
装载到“my-nfs-volume
“,并将容器中的/nfs
装载到/nfs
my-cifs-volume
从//10.11.12.14/folder/on/CIFS/device
(具有来自用户supercool
(密码为noboDyCanGue55
)的权限)以读/写模式访问“my-cifs-volume
“,并将容器中的该文件装载到/cifs
更多详细信息可在此处找到: