Просто столкнулся с этой проблемой сам. Я не думаю, что dotnet watch run
хорошо играет с URL-адресами типа localhost. Попробуйте установить URL вашего хостинга на https://0.0.0.0:5000
в вашем контейнере.
В файле Docker с:
ENTRYPOINT [ "dotnet", "watch", "run", "--no-restore", "--urls", "https://0.0.0.0:5000"]
Или в файле launchSettings.json, например:
{
"profiles": {
"[Put your project name here]": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"DOTNET_USE_POLLING_FILE_WATCHER": "true"
},
"applicationUrl": "https://0.0.0.0:5000/"
}
}
}
Теперь, чтобы заставить его автоматически перезагружаться из контейнера, вы должны использовать средство просмотра файлов опроса. Вот для чего нужна вторая переменная среды. (Это довольно часто, вы должны сделать это с помощью webpack, angular и т. Д.).
В вашем случае вам нужно изменить esportsapp.volume
на каталог на вашем хосте:
volumes:
- ./:/app
Это отобразит том / app в вашем контейнере в каталог docker-compose. Проблема, с которой вы сталкиваетесь, заключается в том, что приложение встроено в том в сети по умолчанию для вашего проекта, поэтому при изменении файла в исходном каталоге оно фактически не изменяется в этом томе. Однако с этим исправлением вы столкнетесь с проблемой восстановления dotnet и отслеживания dotnet внутри контейнера, изменяющего файлы вашего хоста. Для всего этого есть решение, если вам интересно ...
Моя обычная настройка .Net Core App Docker
Для отладки запустите: docker-compose -f run.yml up --build
Чтобы создать релиз: docker-compose -f build.yml up --build
Структура проекта
/ # source control root
/build.yml # docker-compose file for building a release
/run.yml # docker-compose file for running locally & debugging
/project # an application
/project/build.Dockerfile # the docker container that will build "project" for release
/project/run.Dockerfile # the docker container that will build and run "project" locally for debugging
/project/.dockerignore # speeds up container builds by excluding large directories like "packages" or "node_modules"
/project/src # where I hide my source codez
/project/src/Project.sln
/project/src/Project/Project.csproj
/project/src/Project/Directory.Build.props # keeps a docker mapped volume from overwriting .dlls on your host
/project/src/Project.Data/Project.Data.csproj # typical .Net project structure
/web-api # another application...
Directory.Build.props (поместите его в ту же папку, что и ваш .csproj, чтобы ваша команда dotnet watch run
не связывалась с исходным каталогом на вашем хосте)
<Project>
<PropertyGroup>
<DefaultItemExcludes>$(DefaultItemExcludes);$(MSBuildProjectDirectory)/obj/**/*</DefaultItemExcludes>
<DefaultItemExcludes>$(DefaultItemExcludes);$(MSBuildProjectDirectory)/bin/**/*</DefaultItemExcludes>
</PropertyGroup>
<PropertyGroup Condition="'$(DOTNET_RUNNING_IN_CONTAINER)' == 'true'">
<BaseIntermediateOutputPath>$(MSBuildProjectDirectory)/obj/container/</BaseIntermediateOutputPath>
<BaseOutputPath>$(MSBuildProjectDirectory)/bin/container/</BaseOutputPath>
</PropertyGroup>
<PropertyGroup Condition="'$(DOTNET_RUNNING_IN_CONTAINER)' != 'true'">
<BaseIntermediateOutputPath>$(MSBuildProjectDirectory)/obj/local/</BaseIntermediateOutputPath>
<BaseOutputPath>$(MSBuildProjectDirectory)/bin/local/</BaseOutputPath>
</PropertyGroup>
</Project>
run.yml (docker-compose.yml для отладки)
version: "3.5"
services:
project:
build:
context: ./project
dockerfile: run.Dockerfile
ports:
- 5000:80
volumes:
- ./project/src/Project:/app
run.Dockerfile (Dockerfile для отладки)
FROM microsoft/dotnet:2.1-sdk
# install the .net core debugger
RUN apt-get update
RUN apt-get -y --no-install-recommends install unzip
RUN apt-get -y --no-install-recommends install procps
RUN rm -rf /var/lib/apt/lists/*
RUN curl -sSL https://aka.ms/getvsdbgsh | bash /dev/stdin -v latest -l /vsdbg
VOLUME /app
WORKDIR /app
CMD dotnet watch run --urls http://0.0.0.0:80
build.yml (docker-compose.yml для сборки версий выпуска)
version: "3.5"
services:
project:
build:
context: ./project
dockerfile: build.Dockerfile
volumes:
- ./project:/app
build.Dockerfile (Dockerfile для сборки релизных версий)
FROM microsoft/dotnet:2.1-sdk
VOLUME /app
# restore as a separate layer to speed up builds
WORKDIR /src
COPY src/Project/Project.csproj .
RUN dotnet restore
COPY src/Project/ .
CMD dotnet publish -c Release -o /app/out/