将本地卷挂载到远程Docker容器,是否可行?

12

最近我对使用Docker感到相当舒适,通常用它来测试网站以确保在部署到服务器之前能够正常运行。

通常情况下,我会将本地目录挂载到正在运行的镜像上,例如:

docker run -v c:\temp\website:/var/www/html (you get the picture)

我很好奇是否有一种方法可以将我的本地卷挂载到运行Docker的远程服务器上。我相当确定答案是否定的,除非我打洞穿过防火墙等等,使本地卷共享对外。

但是,我还是想问问。 Docker似乎很快就会做出一些令人惊叹的事情。


根据我所了解的,Docker卷必须存在于主机上,不能来自远程源。我一直在寻找与您想要做的相反的事情。一个带有远程卷的本地容器。 - Benjamin Slabbert
我查找了一下卷驱动程序,并找到了这个:请参见:flocker。虽然它不能解决你的问题,但提供了一种使用远程卷的方法。 - Benjamin Slabbert
@BenjaminSlabbert,你好,我正在尝试做和你几乎一样的事情。我的生产远程Docker容器在AWS的Elastibeanstalk上运行,我想要对其卷进行快照/复制,并将本地Docker容器连接到它(目的是用类似于生产环境的数据填充本地环境并进行测试),你能否在此回复任何你认为对此有用的内容?谢谢。 - Yusuf
1
嗨@Yusuf,我的建议是创建EBS快照,请参见:[EBSSnapshots](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSSnapshots.html)这将定期备份您的docker卷,以便稍后用于测试。我还建议您使用EBS卷作为docker卷和这些备份的卷不是根卷。我不知道如何在本地docker容器中使用删除卷,但也许在您的情况下将数据下载到计算机上是可以接受的。 - Benjamin Slabbert
1个回答

10
  1. 首先在Windows中共享本地目录。假设你的共享文件夹是\\windowsip\website
  2. 然后登录到运行docker引擎的远程Linux机器,并确保可以挂载Windows共享文件夹:sudo apt install cifs-utils
  3. 尝试连接到您的共享:sudo mount -t cifs -o user=******,password=******,uid=ubuntu,gid=ubuntu //windowsip/website /home/ubuntu/website
  4. 当一切正常运行时,让我们用docker做同样的事情。创建一个命名卷如下:docker volume create --driver local --opt type=cifs --opt device='//windowsip/website' --opt o='username=*****,password=*****' website
  5. docker run -v website:/var/www/html

我知道这是一个旧帖子,但我刚遇到了同样的问题,希望对其他人有所帮助。

好的好的,我没有读到问题的最后一部分。是的,你需要打开防火墙的端口。但仍然很有用,我有一个运行docker的Linux服务器,在家里用我的笔记本电脑通过VPN进行工作。容器可以本地访问所有内容。


2
我们这里不需要VPN,那么使用SSH连接转发本地CIFS端口(445)怎么样? - Michał Karpacki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接