我使用Azure容器服务将dockerized应用程序部署到azure。它是使用MongoDB的NodeJS / Express应用程序。一切都运行正常,但现在我要做的是在我的一个内部项目文件夹和VM上的文件夹之间设置一个卷映射。
这在常规docker中工作正常,我只需在启动容器时运行以下命令:
docker run -d --net=784849494 -p 5555:80 -v /www/uploads:/var/www/myapp/uploads myapp
基本上,我在我的VM中的www中创建了一个uploads文件夹,它映射到我的项目文件夹上传。
这是我很困惑的部分,当我在我的VM中创建文件夹时,我可以通过
访问我的文件夹user@myazureapp -p 2200 -L 22375:12.0.0.1:2375 -i mykey
这不起作用。我猜这个文件夹需要在另一个与容器服务集成的VM中创建。但我不知道那是哪里也找不到。
答案 0 :(得分:2)
简短版本:
您不希望在VM文件夹上使用,您需要某种网络驱动器来存储数据。也许使用MongoDB服务或将MongoDB文件存储在可以保证数据访问的存储帐户中。例如,要执行后者,可以使用Docker的Azure文件卷驱动程序(请参阅https://azure.microsoft.com/en-us/blog/persistent-docker-volumes-with-azure-file-storage/)
更长的版本:
您正在创建文件夹的计算机是主计算机。它不是部署容器的位置,而是Docker Swarm主站所在的位置。这就是你无法看到它的原因。您需要在代理上创建文件夹。
但是,您不知道Swarm将在集群中部署容器的位置,因此无法保证它将放置在您的文件夹所在的VM上。即使你很幸运,第一次部署它就会降落到正确的虚拟机上,如果Docker需要重启,它无法保证它会在同一个虚拟机上重启。
您可以在每个代理上创建一个文件夹,但是如果容器重新启动,则无法保证它在同一个VM上重新启动,因此您的容器将无法访问相同的数据。即使您确实登陆了同一个VM,您仍可能遇到麻烦,因为如果您的VM重新启动,也许是由Azure修复服务,则无法保证VM磁盘仍然存在。虚拟机磁盘是短暂的,我假设你不希望这些数据消失。
在许多情况下,最好的选择是为您的数据使用服务,而不是在群集中运行它,例如https://docs.microsoft.com/en-us/azure/documentdb/documentdb-protocol-mongodb。这意味着其他人负责备份,可用性,可扩展性,性能等。这确实意味着您要为服务付费,但是当您考虑到管理自己的服务的成本时,它通常会更便宜 - 而且您需要更小的服务ACS集群。
如果您确实想要托管自己的MongoDB实例,那么您可以考虑使用Volume驱动程序来确保您的MongoDB容器始终可以访问网络存储位置,无论它在何处部署。例如,您可以将Azure文件卷驱动程序用于Docker(请参阅https://azure.microsoft.com/en-us/blog/persistent-docker-volumes-with-azure-file-storage/)。