Docker 存储 jpg 的体积使用情况

Docker volume usage for storing jpg

所以,我构建了一个小应用程序来测试 docker 的工作原理,这是一个小的 laravel 应用程序,可以使用其个人资料图像注册用户。一切正常,但个人资料图片未显示。

我认为这是因为 docker 的工作方式(短暂的、不变的等),所以我阅读了一些关于卷的内容,但不幸的是我无法让它工作。

图像存储在 public 文件夹(laravel 结构)中名为 uploads 的文件夹中。

在我的 docker-compose.yml 文件中,我定义了以下卷:

    volumes:
      - mysql-data:/var/lib/mysql

所以我试着添加我需要的那个,像这样:

    volumes:
      - mysql-data:/var/lib/mysql
      - user-images:/app/public/uploads
    volumes:
      mysql-data:
      user-images:

我也尝试过绑定挂载,但我认为这只能使用 docker 容器 运行(不太确定)。

知道如何解决这个问题吗?

谢谢

user-images:/app/public/uploads 将是 命名的 卷,在 /var/lib/docker/volumes

中定义

如果要使用 a bind mount,即将主机文件夹作为卷安装,请使用路径:

volumes:
  - "./user-images:/app/public/uploads"

另请参阅“Laravel + Docker" and its part 2 以获得更完整的示例。

我假设您的图像位于 dockerfile/docker-compose 的目录树中。如果是这种情况,您实际上不想使用命名卷,因为它们存储在您系统的其他地方,并且需要您将图像移动到该位置。 (参见下图中的 "Mountpoint")

您可能想要使用的是 --mount 标志,它在您的撰写文件中看起来像这样...

volumes:
  - type: bind
    source: ./path/to/file
    target: /app/public/uploads

有关详细信息,请参阅 docker volumes 码头。我写了我更喜欢的长版本,因为它更明确,但排序版本做同样的事情。您应该知道,如果它们重叠,使用绑定卷将覆盖您可能添加到实际图像中的任何文件。提示当您有热重载开发服务器时,这很方便,因为您可以在本地更改文件,它们在容器上下文中是 运行。