Краткий ответ: ваш рабочий каталог /
, он должен быть /app
.
Когда вы обслуживаете stati c файлы с ASP. Net Core, Microsoft говорит следующее:
Веб-хост приложения должен знать о каталоге root содержимого.
Метод WebHost.CreateDefaultBuilder устанавливает для содержимого root значение текущий каталог
Источник , выделено мое.
Глядя на свой файл Docker, вы никогда не меняете рабочий каталог, поэтому он остается таким же, как базовый образ, из которого вы извлекаете его (aspnet:3.0
изображение) 1 .
Поскольку ваш рабочий каталог /
, приложение ищет папку wwwroot
(по существу * 1027) *), который он не может найти. Вот почему вы получаете 404 для всех ваших wwwroot активов.
Чтобы это исправить, просто измените рабочий каталог образа Docker и обновите точку входа, чтобы использовать относительный путь из этого WD.
#Dockerfile
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0
COPY /bin/Release/netcoreapp3.0/publish/. app/
EXPOSE 80 443 5000 5001
WORKDIR app
ENTRYPOINT ["dotnet", "KittenSignalR.dll"]
1 Стоит отметить, что вы копируете файлы, и установить рабочий каталог на app
. Это относительный путь к каталогу, и я НАСТОЯТЕЛЬНО рекомендую сделать его абсолютным (/app
).
Я , предполагая , что образ aspnet:3.0
имеет рабочий каталог по умолчанию /
, но я не уверен.
Если оставить его относительно, это означает, что вы основываете свою структуру папок из рабочего каталога по умолчанию для базового образа. Это может быть root, а может и нет. Лучше убедиться в абсолютности (каламбур) и сделать его абсолютным путем.
#Dockerfile
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0
COPY /bin/Release/netcoreapp3.0/publish/. /app/
EXPOSE 80 443 5000 5001
WORKDIR /app
ENTRYPOINT ["dotnet", "KittenSignalR.dll"]