У меня есть веб-приложение ASP.Net MVC (.Net Framework 4.6), которое я обычно запускал на локальной машине разработчика (скажем, оно работает на localhost:10000
).Приложение подключается к нескольким локальным службам:
- База данных
- Azure Storage (эмулятор)
- Azure Cosmos (эмулятор)
Localкомпьютер dev (хост) работает под управлением Windows 10.
Вопрос
Я в процессе перемещения этого приложения в контейнер Docker и смог запустить приложение из Docker.контейнер.У меня вопрос, как мне настроить сеть (используя Docker Compose или docker run
, чтобы приложение (находящееся в контейнере) могло подключаться к службам (база данных, хранилище и эмулятор космоса), которые находятся на моем хосте?
Что я пробовал
- Использование
host.docker.internal
- Docker compose сеть по умолчанию
- Docker compose (
network_mode: host
) - CLI Docker (
run --network
) - SQL Server для прослушивания всех портов
Ничего из этого не работает. Я по-прежнему получаю сообщение об ошибке при подключении из контейнера в хост.Ошибка
Другие конфигурации
Я использую Dockerfile
и Docker Compose файлы yml для локального построения и запуска контейнера.
Dockerfile
file
# escape=`
FROM mcr.microsoft.com/dotnet/framework/sdk:4.8 AS build
WORKDIR /app
# Copy everything else and build app
COPY Web/Web/. ./Web/Web/
# Build the projects
WORKDIR /app/Web/Web
RUN msbuild /p:Configuration=Debug
FROM mcr.microsoft.com/dotnet/framework/aspnet:4.8 AS runtime
WORKDIR /inetpub/wwwroot
# Configure website
SHELL ["powershell", "-command"]
# Install ASP.NET
RUN Install-WindowsFeature Web-Asp-Net45
EXPOSE 10000
RUN Remove-Website -Name 'Default Web Site'; `
New-Website -Name 'Web' `
-Port 10000 -PhysicalPath 'c:\inetpub\wwwroot' `
-ApplicationPool '.NET v4.5'
# Final copy for build
COPY --from=build /app/Web/. ./
Docker Составьте файл yml.
version: '3.5'
services:
web:
build: .
ports:
- "10000:10000"