часы dotnet запускаются в контейнере с мультипроектным решением - PullRequest
0 голосов
/ 10 ноября 2018

Я пытаюсь создать Dockerfile вместе с файлом docker-compose.yml для запуска dotnet watch run в многопроектном решении ASP.Net Core. Цель состоит в том, чтобы контейнер следил за изменениями во всех трех проектах.

Моя структура решения такова:

Nc.Application
Nc.Domain
Nc.Infrastructure
docker-compose.yml

Nc.Application содержит основной проект для запуска, а две другие папки - это стандартные проекты .Net, на которые ссылается основной проект. Внутри Nc.Application у меня есть папка, Docker, с моим dockerfile.

Controllers
Docker
  Development.Dockerfile
Properties
Program.cs
Startup.cs
...

Мой файл Dockerfile и compose содержит следующее:

Development.Dockerfile

FROM microsoft/dotnet:2.1-sdk AS build
ENTRYPOINT [ "dotnet", "watch", "run", "--no-restore", "--urls", "http://0.0.0.0:5000" ]

докер-compose.yml

version: '3'

services:

  nc.api:
    container_name: ncapi_dev
    image: ncapi:dev
    build:
      context: ./Nc.Application
      dockerfile: Docker/Development.Dockerfile
    volumes:
      - ncapi.volume:.
    ports:
      - "5000:5000"
      - "5001:5001"

volumes:
  ncapi.volume:

Когда я пытаюсь запустить docker-compose up, я получаю следующую ошибку:

ERROR: for f6d811109779_ncapi_dev  Cannot create container for service nc.api: invalid volume specification: 'nc_ncapi.volume:.:rw': invalid mount config for type "volume": invalid mount path: '.' mount path
must be absolute

ERROR: for nc.api  Cannot create container for service nc.api: invalid volume specification: 'nc_ncapi.volume:.:rw': invalid mount config for type "volume": invalid mount path: '.' mount path must be absolute
ERROR: Encountered errors while bringing up the project.

Я не знаю, каким должен быть путь к тому, так как идея состоит в том, чтобы создать контейнер, не содержащий непосредственно файлы, но просматривающий файлы в папке в моей системе.

У кого-нибудь есть предложения, как это сделать?

EDIT:

Я обновил WORKDIR в Dockerfile до /app/Nc.Application, обновил путь к тому до ./:/app и удалил названный том volumes: ncapi.volume. Однако теперь я получаю следующую ошибку:

ncapi_dev | watch : Polling file watcher is enabled
ncapi_dev | watch : Started
ncapi_dev | /usr/share/dotnet/sdk/2.1.403/Sdks/Microsoft.NET.Sdk/targets/Microsoft.PackageDependencyResolution.targets(198,5): error NETSDK1004: Assets file '/app/Nc.Application/c:/Users/Christian/Documents/source/nc/Nc.Application/obj/project.assets.json' not found. Run a NuGet package restore to generate this file. [/app/Nc.Application/Nc.Application.csproj]
ncapi_dev |
ncapi_dev | The build failed. Please fix the build errors and run again.
ncapi_dev | watch : Exited with error code 1
ncapi_dev | watch : Waiting for a file to change before restarting dotnet...

1 Ответ

0 голосов
/ 11 ноября 2018

Обновление: последние версии VS Code Insiders представили Удаленная разработка , которая позволяет напрямую работать внутри контейнера . Стоит проверить это.


Вы не должны монтировать вещи в корне контейнера. Используйте другую точку монтирования, например /app. Кроме того, для этой ситуации вам не нужен именованный том, а монтируется связывание.

Внести подобные изменения

Development.Dockerfile

FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /app
ENTRYPOINT [ "dotnet", "watch", "run", "--no-restore", "--urls", "http://0.0.0.0:5000" ]

докер-compose.yml

version: '3'

services:

  nc.api:
    container_name: ncapi_dev
    image: ncapi:dev
    build:
      context: ./Nc.Application
      dockerfile: Docker/Development.Dockerfile
    volumes:
      - ./:/app
    ports:
      - "5000:5000"
      - "5001:5001"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...