Docker, кажется, работает с неправильным объемом - PullRequest
0 голосов
/ 14 января 2020

У меня есть веб-проект, который написан поверх ASP. NET Core 3.1 framework. Я хочу запустить проект в docker контейнере в Linux виртуальной коробке.

Я создаю следующий docker-compose.yml файл

version: '3.4'

services:
  myproject:
    image: ${DOCKER_REGISTRY-}myproject
    build:
      context: .
      dockerfile: myproject/Dockerfile
    volumes:
      - storage:/storage
      - ${APPDATA}/Microsoft/UserSecrets:/root/.microsoft/usersecrets:ro
      - ${APPDATA}/ASP.NET/Https:/root/.aspnet/https:ro
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_URLS=https://+:443;http://+:80
    ports:
      - 51736:80
      - 44344:443
volumes:
  storage:

Когда я выполняю docker-compose up --build

, я получаю следующий вывод

Successfully built b084cb989f05
Successfully tagged myproject:latest
Starting myproject_myproject_1 ... done
Attaching to myproject_myproject_1
myproject_1  | Unhandled exception. System.IO.DirectoryNotFoundException: /app/Storage/
myproject_1  |    at Microsoft.Extensions.FileProviders.PhysicalFileProvider..ctor(String root, ExclusionFilters filters)
myproject_1  |    at Microsoft.Extensions.FileProviders.PhysicalFileProvider..ctor(String root)

Из журналы над приложением ищут /app/Storage/ путь для инициализации PhysicalFileProvider. Я не уверен, откуда это исходит. Согласно моему файлу docker-compose.yml, объем хранилища должен быть /storage, а не /app/Storage/.

В какой-то момент в моем файле docker-compose.yml было storage:/app/Storage, но его больше нет. Что может быть причиной того, что изображение прикреплено к неправильной папке тома / хранилища?

Обновлено

Вот содержимое Dockerfile

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["myproject/myproject.csproj", "myproject/"]
RUN dotnet restore "myproject/myproject.csproj"
COPY . .
WORKDIR "/src/myproject"
RUN dotnet build "myproject.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "myproject.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "myproject.dll"]

Я попробовал следующую команду, чтобы удалить все

docker-compose down -v --rmi all --remove-orphans
docker-compose build --no-cache

Однако я все еще получаю тот же результат. Как правильно смонтировать папку /storage с образом?

1 Ответ

0 голосов
/ 14 января 2020

Сообщение не имеет отношения к docker -составить, я думаю.

Что-то в приложении говорит ему, чтобы посмотреть на эту папку. Правильно, что папка не существует, потому что docker -композиция не создает ее.

Проверьте код или конфигурацию в самом приложении ASP. NET, которое предоставляет этот путь. Или команда docker, которая запускает процесс do tnet als, или переменные окружения, установленные в файле docker.

Обновление:

Глядя на ваш файл Docker, я предполагаю, что приложение ищет storage только не /storage (относительный путь, а не абсолютный путь), и поэтому вы получаете дополнительный /app в начале (из workdir).

...