【问题标题】:Docker compose port forwarding Linux asp.net coreDocker compose 端口转发 Linux asp.net core
【发布时间】:2021-10-14 04:14:03
【问题描述】:

我有几个 docker 镜像,它们运行良好,除了端口总是 5000(默认值,在 asp.net 核心上),无论我做什么,它们都没有改变,任何想法,如何修复或调试更进一步?

在 Linux (Debian 9) 上运行的容器 托管在 Linode 上

开始构建

docker-compose -f docker-compose.yml up

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

DockerFile

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

【问题讨论】:

  • 但是有- "5000:80"
  • 嗨@RomanMarusyk,是的,几乎所有的例子都是这样的

标签: linux docker docker-compose yaml asp.net-core-webapi


【解决方案1】:

默认情况下,ASP.NET Core 应用在端口 5000(或 TLS 的 5001)上运行。您可以通过几种方式更改它,最简单的方法是设置 ASPNETCORE_URLS 环境变量,例如如果你想在更典型的 HTTP/S 端口 80/443 上运行:

environment:
  - ASPNETCORE_URLS=https://+:443;http://+:80

也就是说,我看不出你有任何理由要这样做。为什么不直接绑定到容器上的 5000 端口?例如。而不是5000:80 使用5000:5000。可能值得阅读文档here

【讨论】:

  • 您好,感谢您抽出宝贵时间回答,我添加了包含环境端口 80 的 docker-compose.debug.yml,据说值得直接在 docker-compose.yml 中添加文件?
  • 感谢您添加该文件,看起来更好。如果您想使用端口 80,那么我建议您将 ASPNETCORE_URLS 实际上放在您的 Dockerfile 中,例如ENV ASPNETCORE_URLS=http://+:80。但就我个人而言,我会使用标准端口 5000,因为您的环境会更加一致,而且配置越少越好。
  • 嗨,是的,我会坚持使用 5k 罐,我需要在 port80 上测试它是否可以工作并设置一个 letsencrpyt 证书,我会测试并回来,谢谢
猜你喜欢
  • 2018-08-09
  • 1970-01-01
  • 2018-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-24
  • 2019-05-05
  • 1970-01-01
相关资源
最近更新 更多