我有网络应用,正在使用docker将其部署到Linux服务器。我为我的应用程序使用ASP .NET CORE 2.1,MVC模型,并通过Visual Studio的集成Container Registry将其发布到docker hub。从我的服务器上拉图像,然后运行它。问题是,每次我将更新发布到我的应用程序时,它都会重置应用程序中的所有文件,这就是容器的工作方式。但是我需要一些文件保留在服务器中,并且每次我更新应用程序时都不要重置它们,因此我需要使用卷。但是我不知道如何使用ASP CORE应用程序和docker卷,我想我可以创建它们,但是如何从应用程序访问它们呢?
我尝试了一些在网上找到的方法,
所以通常我要运行docker,我需要从hub.docker中将其拉出: docker pull mydockerid/appname:tag
然后,使用命令运行它:docker run -p 3000:80 mydockerid/appname:tag
就是这样。
我试过了: docker run -p 3000:80 -v ~mnt/files/xml:/xml mydockerid/appname:tag
据我了解,它应该使docker使用服务器文件夹“ mnt / files / xml”作为我的名为“ xml”的应用程序中的文件夹,但是不起作用。
我也在使用Digital ocean,目录“ mnt / files / xml”是连接到Droplet的卷。
完美的解决方案是让我可以在Droplet卷内创建docker卷,但实际上任何可行的解决方案都很棒!
感谢帮助 !
好吧,我很近
要在Docker中创建卷,您需要从服务器中选择目录,并从应用中选择文件夹。我的问题是,我在应用程序中显示了错误的目录。因为在docker容器中可以说根文件夹位于/ app / root下,所以我的xml文件夹也是如此,所以我需要修复的是使用docker run -p 3000:80 -v ~mnt/files/xml:/app/xml mydockerid/appname:tag
而不是docker run -p 3000:80 -v ~mnt/files/xml:/xml mydockerid/appname:tag
第一个目录始终来自服务器,第二个目录始终来自应用程序。
至于数字海洋中的数量:
转到左侧管理下的卷。按右上方的创建音量按钮。选择Volume的配置,然后将其附加到您的液滴上。
安装它:
$ mkdir -p /mnt/files
# Mount your volume at the newly-created mount point:
$ mount -o discard,defaults,noatime /dev/disk/by-id/scsi-0DO_volume_name /mnt/files
# Change fstab so the volume will be mounted after a reboot
$ echo '/dev/disk/by-id/scsi-0DO_volume_name /mnt/files ext4 defaults,nofail,discard 0 0' | sudo tee -a /etc/fstab
如果进入卷上“更多”下的“配置说明”,Digital Ocean实际上将显示所有这些命令和卷名。
然后,因为我的DO卷已挂载到/ mnt / files,我通过filezila连接到服务器,将所需的文件放在名为“ xml”的文件夹中,并使用运行docker容器docker run -p 3000:80 -v ~mnt/files/xml:/xml mydockerid/appname:tag
,现在无论服务器中的xml文件夹中有什么。它将在我的应用程序内部(名为xml的文件夹)中读取,并且我可以更新应用程序,并且该文件夹永远不会丢失数据。同样,我可以将此DO体积移动到另一个DO液滴而不会丢失数据。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句