Docker 组合端口转发 Linux asp.net 核心
Docker compose port forwarding Linux asp.net core
我有几个 docker 图像,它们 运行 除了端口总是 5000(默认值,在 asp.net 核心),无论我做什么它们没有改变,有什么想法,如何进一步修复或调试?
容器 运行宁 Linux (Debian 9)
托管在 Linode
开始构建
docker-compose -f docker-compose.yml向上
Docker-compose.yml
#Api Service
API:
build:
context: .
#Use the DockerFile in that Directory
dockerfile: Dockerfile
#This Service Depends on the database service specifed above
depends_on:
- database
#Map port 8888 in the docker container to port 80 in the Api
ports:
- "5000:80"
restart: always
#Specify Environment Variables for the Api Service
environment:
- DBHOST=database
- ASPNETCORE_ENVIRONMENT=Production
Docker文件
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /app
EXPOSE 80/tcp
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["TestApi.csproj", "./"]
RUN dotnet restore "TestApi.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "TestApi.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "TestApi.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "TestApi.dll"]
docker-compose.debug.yml
version: '3.4'
services:
testapi:
image: testapi
build:
context: .
dockerfile: ./Dockerfile
ports:
- 80
- 5000
environment:
- ASPNETCORE_ENVIRONMENT=Production
- ASPNETCORE_URLS=http://+:80
volumes:
- ~/.aspnet/https:/https:ro
默认情况下,ASP.NET 核心应用 运行 在端口 5000(或 5001 用于 TLS)上。您可以通过几种方式更改它,最简单的方法是设置 ASPNETCORE_URLS
环境变量,例如如果你想 运行 在更典型的 HTTP/S 端口 80/443:
environment:
- ASPNETCORE_URLS=https://+:443;http://+:80
就是说,我看不出您有任何理由要这样做。为什么不直接绑定到容器上的端口 5000?例如。使用 5000:5000
而不是 5000:80
。可能值得阅读文档 here.
我有几个 docker 图像,它们 运行 除了端口总是 5000(默认值,在 asp.net 核心),无论我做什么它们没有改变,有什么想法,如何进一步修复或调试?
容器 运行宁 Linux (Debian 9) 托管在 Linode
开始构建
docker-compose -f docker-compose.yml向上
Docker-compose.yml
#Api Service
API:
build:
context: .
#Use the DockerFile in that Directory
dockerfile: Dockerfile
#This Service Depends on the database service specifed above
depends_on:
- database
#Map port 8888 in the docker container to port 80 in the Api
ports:
- "5000:80"
restart: always
#Specify Environment Variables for the Api Service
environment:
- DBHOST=database
- ASPNETCORE_ENVIRONMENT=Production
Docker文件
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /app
EXPOSE 80/tcp
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["TestApi.csproj", "./"]
RUN dotnet restore "TestApi.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "TestApi.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "TestApi.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "TestApi.dll"]
docker-compose.debug.yml
version: '3.4'
services:
testapi:
image: testapi
build:
context: .
dockerfile: ./Dockerfile
ports:
- 80
- 5000
environment:
- ASPNETCORE_ENVIRONMENT=Production
- ASPNETCORE_URLS=http://+:80
volumes:
- ~/.aspnet/https:/https:ro
默认情况下,ASP.NET 核心应用 运行 在端口 5000(或 5001 用于 TLS)上。您可以通过几种方式更改它,最简单的方法是设置 ASPNETCORE_URLS
环境变量,例如如果你想 运行 在更典型的 HTTP/S 端口 80/443:
environment:
- ASPNETCORE_URLS=https://+:443;http://+:80
就是说,我看不出您有任何理由要这样做。为什么不直接绑定到容器上的端口 5000?例如。使用 5000:5000
而不是 5000:80
。可能值得阅读文档 here.