【问题标题】:How to create docker volume using docker-compose file so the app can write files to when running?如何使用 docker-compose 文件创建 docker 卷,以便应用程序可以在运行时写入文件?
【发布时间】:2020-04-29 17:13:04
【问题描述】:

我有一个使用 ASP.NET Core 3.1 框架编写的应用程序。我正在尝试创建一个 docker 映像以允许我在 Linux 系统上运行该应用程序。

我的应用程序允许用户将文件上传到服务器,因此它将上传的文件写入位于我的项目根文件夹中的名为“Storage”的文件夹中。

我想在 Linux 机器上创建一个永久存储,以便在删除映像时不会破坏它。

我创建了以下 docker-compose.yml 文件,其中包含有关如何创建卷的说明,如下所示

version: '3.4'

services:
  myproject:
    image: ${DOCKER_REGISTRY-}myproject
    build:
      context: .
      dockerfile: MyProject/Dockerfile
    environment:
    - ASPNETCORE_ENVIRONMENT=Development
    - ASPNETCORE_URLS=https://localhost;http://localhost
    - ASPNETCORE_HTTPS_PORT=44344
    ports:
    - 51736:80
    - 44344:443
    volumes:
      - photos:/app/Storage

volumes:
  photos:

据我了解,位于myproject 服务下的volumes 将名为photos 的卷映射到/app/Storage

但是,我不是在服务器上创建卷的命令,因此它不会被删除。

如何正确创建卷并指向图像以使用它?

【问题讨论】:

    标签: docker docker-compose docker-volume docker-image


    【解决方案1】:

    您不需要其他任何东西。你已经拥有了那里的一切。 docker-compose 将自动为您创建 photos 卷并在容器重新启动时保留它。首次启动此堆栈后检查docker volume ls,您将看到列出的卷。

    【讨论】:

    • 当我使用docker image -p 44344:443 imagename:latest 运行我的图像时,我收到以下错误Unhandled exception. System.IO.DirectoryNotFoundException: /app/Storage/,因此应用程序无法启动,因为目录不可用。当我通过 SSH 连接到我的机器并执行 cd /app/Storage` 时,我没有得到这样的文件或目录
    • 你需要运行docker-compose up才能使用你写的docker-compose.yml
    • docker-compose build 用于创建图像。然后docker push 将其推送到集线器。然后在虚拟机上,我执行docker run ... 下载并在虚拟机上运行应用程序。当我执行 docker-compose 命令时找不到。 docker-compose build 不会使用 dockerfile 和 docker-compose.yml 文件中的所有内容创建映像吗?
    猜你喜欢
    • 2018-06-05
    • 2020-04-06
    • 1970-01-01
    • 2019-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多