linux - .Net Core Docker 在 DigitalOcean 上构建时正在删除图像(图片)
问题描述
我已经使用 docker 在 DigitalOcean 上部署了 .net core 3.1 项目。在我的 wwwroot 目录中的项目中,有一个 images 目录,我将在其中上传图片。上传后,我可以在浏览器中看到图片。
但问题是,如果我再次构建一个 docker 项目并运行它,那么它不会显示之前上传的图片。
我的 docker build 命令是:docker build -t "jugaadhai-service" --file Dockerfile .
和 docker run 命令是docker run -it -d -p 0.0.0.0:2900:80 jugaadhai-service
编辑1: 经过一番搜索,我知道当项目通过docker运行时,文件将上传到docker的容器目录而不是项目目录中。这就是为什么图像不会出现在新版本中的原因。
解决方案
因此,当创建 docker 容器时,它是在主机上运行的隔离虚拟环境。如果主机是您的本地计算机或云中的某个主机并不重要,它的工作方式相同。容器是根据 Dockerfile 中的构建定义创建的。这意味着您可以在本地环境中复制它,尝试构建图像,上传一些图像,然后删除图像或创建具有相同标签的新图像。然后图像也消失了。
如果您将图像或文件上传到比方说 DigitalOcean 的容器,并且您使用不同的 重新部署新容器tag
,则图像仍然存在于旧容器中。如果你在 kubernetes 上运行,同样的事情,如果 pod/container 重新启动,那么一切都会永远丢失,就好像构建了一个新容器一样。
这就是volumes
发挥作用的地方。因此,当您有要存储的持久数据时,您应该将它们存储在容器本身之外。如果要将图像存储在主机或其他网络驱动器上,则必须指定它并将其与容器映射。
你可以在这里找到更多关于它的信息:
推荐阅读
- jenkins - Jenkins Pipeline 将 Stage 作为变量?
- flutter - Flutter RenderFlex 溢出
- java - 在 java 8 中使用 Stream 将列表字符串转换为 ArrayList 浮点数
- c# - 在.NET 框架中,对象的字段地址如何在运行时定位?
- syntax - 是否有编程语言迫使您处理所有可能的错误?
- r - 使用ggplot2在同一折线图上显示多条线
- javascript - 如何在字符串数组中找到最长的公共前缀?
- reactjs - 使用反应测试库和 Jest 测试 Amplify Cognito Auth.SignIn()
- python - 带有字母数字和破折号的正则表达式,没有前导和尾随破折号
- matplotlib - 将 2 个不同的蒙版应用于 seaborn 热图或手动更改单元格的颜色