【问题标题】:Docker bind mount to environment variable (in ASP.NET Core)Docker 绑定挂载到环境变量(在 ASP.NET Core 中)
【发布时间】:2020-04-05 02:12:03
【问题描述】:

我有两条路。一个用于获取模板,一个用于生成文档。 在 Docker 上部署它工作正常(应用程序启动,工作并且没有发出警告),绑定安装在我的本地机器上创建这两个目录,但似乎没有使用它们,甚至没有创建它们?在容器上。

这是我尝试过的:

1) AppSettings.json 中的指定路径(这是我没有 Docker 的配置,下面会在 docker-compose 文件中覆盖)

  "RootDirectoryForDocuments": {
    "DocumentsRoot": "TestDocumentsDir",
    "TemplatesRoot": "TestTemplatesDir"
  }

2) 创建 Docker Compose 文件。这里首先我将路径作为环境变量提供,然后尝试让容器在卷部分中使用它们:

version: "3.7"
services:
    hraapi: 
        build: ../Hra.Api
        environment:
            - ASPNETCORE_ENVIRONMENT=Development
            - ENV_RootDirectoryForDocuments_DocumentsRoot="/app/GeneratedDocs"
            - ENV_RootDirectoryForDocuments_TemplatesRoot="/app/Templates"

        image: user/hra.api:v1.0
        container_name: hra.api
        ports:
            - "5000:80"
        depends_on:
            - hradb
        volumes:
            - C:/Users/User/Desktop/GeneratedDocs:/app/GeneratedDocs
            - C:/Users/User/Desktop/Templates:/app/Templates

当我运行这个 DockerCompose 时,它​​会自动在我的桌面上创建这两个文件夹。但是,我希望它也能在容器中创建和使用它们。 我尝试了很多来寻找 ASP.NET Core 容器的结构,以便使用那里已经存在的路径,但没有成功。

【问题讨论】:

    标签: c# docker asp.net-core docker-compose


    【解决方案1】:

    很抱歉,我还不能发表评论,但这里可能是您的“容器层次结构”问题的解决方案:

    这个 docker 在你的本地机器上工作吗?您可以使用容器的 id 登录到工作中的 docker 容器,并准确检查文件系统内部发生的情况。 首先,获取docker id:

    #> docker ps
    

    然后,使用 id(它看起来像:ka7859adgfa59)

    #> docker exec -it ka7859adgfa59 /bin/bash
    

    您可以使用 bash shell 进入容器。

    “volumes:”部分使用短语法,如果这些文件夹不存在,则应该在其中创建这些文件夹SHORT SYNTAX

    【讨论】:

    • 谢谢@ashantiel。使用 docker exec -it hra.api /bin/bash 探索容器文件结构确实很有帮助。问题是我使用的是“DocumentsRoot\Something”之类的路径。带有 resharper 的 C# 让我可以使用反斜杠或正斜杠,但在 docker compose 中,这条路径没有被转义。所以它创建了一个名为“DocumentsRoot\Something”的文件夹。
    猜你喜欢
    • 2021-02-15
    • 2022-11-16
    • 1970-01-01
    • 2021-03-23
    • 2020-12-07
    • 2021-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多