Docker привязать монтирование к переменной среды (в ASP. NET Core) - PullRequest
0 голосов
/ 04 апреля 2020

У меня есть два пути. Один для получения шаблонов и один для создания документов. Развертывание этого на Docker работает нормально (приложение запускается, работает и не выдает предупреждений), bind mount создает эти 2 каталога на моем локальном компьютере, но, похоже, не использует их, или даже создать их? в контейнере.

Вот что я попробовал:

1) Указанные пути в AppSettings. json (это моя конфигурация без Docker, она будет переопределена ниже в docker -compose file)

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

2) Создан Docker Compose File. Сначала я даю пути в качестве переменных среды, а затем пытаюсь заставить контейнер использовать их в разделе томов:

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, он автоматически создает эти 2 папки на моем рабочем столе. Тем не менее, я надеялся, что он будет создавать и использовать их также в контейнере. Я много пытался выяснить, как структурируются ASP. NET Базовые контейнеры, чтобы использовать уже существующий путь, но безуспешно.

1 Ответ

1 голос
/ 04 апреля 2020

Извините, я пока не могу комментировать, но здесь может быть решение вашей проблемы "иерархии контейнеров":

Работает ли это docker на вашем локальном компьютере? Вы можете войти в рабочий контейнер docker, используя идентификатор контейнера, и точно проверить, что происходит внутри файловой системы. Сначала получите docker id:

#> docker ps

Затем, используя идентификатор (он будет выглядеть так: ka7859adgfa59)

#> docker exec -it ka7859adgfa59 /bin/bash

, вы можете попасть внутрь контейнера с помощью bash shell.

Часть "volume:" использует короткий синтаксис, который должен создавать эти папки внутри, если их там уже нет SHORT SYNTAX

...