按照我的方式逐步完成有关dockerized ASP.NET核心的API WeatherForecast Web模板的教程:
我必须从这里开始,因为我无法使用此处的教程https://docs.docker.com/compose/aspnet-mssql-compose/
来构建新图像“ 1”有效,很棒。但是,“ 2”将无法像宣传的那样在localhost:5000/WeatherForecast
端口上工作,并且在对可用文档进行了多次审查之后,调试为什么会遇到一些麻烦。
我应该注意一点,在从命令行创建模板化应用程序时,我确实选择了--no-https选项。
然后我使用docker ps调出PORTS。该Web应用程序正在使用5000/tcp, 0.0.0.0:32779->80/tcp
。当用5000
代替32779
时,我得到的是返回的API字符串!
我知道我在docker-compose中丢失了一些东西,可能需要多加注意。谢谢!
编辑:供参考,以下文件是由我的VSCode编辑器生成的。
1.我运行了dotnet新的webapi --no-https
2.然后,我调出VSCode“ command Palette”并运行Docker: Add Dockerfiles to Workspace
并选择“是”以包含docker-compose.yml文件和Linux。我还选择使用端口5000
。我使用Fedora 30。
4.我从终端的项目根目录运行dotnet build
。
5.如果我使用docker
命令运行并显式指定端口,则它将按公告运行,但如果运行docker-compose -f <yml-file> up -d- --build
,则它将无法运行。
我只是重新阅读了一下,然后发现我陷入VSCode来解决问题(根据文档),这很烦人
默认情况下,Docker会将随机选择的主机端口分配给容器暴露的端口(容器端口)。在这种情况下,暴露的(容器)端口为5000,但是它将通过随机端口(例如32737)在主机上暴露。
您可以通过更改docker-run:debug任务(在.vscode / tasks.json文件中定义)使用的Docker运行选项来使用主机上的特定端口。例如,如果要使用相同的端口(5000)公开服务,则docker-run:debug任务定义将如下所示:
a。 Dockerfile
# Please refer https://aka.ms/HTTPSinContainer on how to setup an
https developer certificate for your ASP .NET Core service.
version: '3.4'
services:
aspdotnetdocker2:
image: aspdotnetdocker2
build:
context: .
dockerfile: Dockerfile
ports:
- 5000
b。 docker-compose.yml
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS base
WORKDIR /app
EXPOSE 5000
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
WORKDIR /src
COPY ["aspdotnet_docker2.csproj", "./"]
RUN dotnet restore "./aspdotnet_docker2.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "aspdotnet_docker2.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "aspdotnet_docker2.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "aspdotnet_docker2.dll"]
答案 0 :(得分:1)
简短语法
要么指定两个端口(HOST:CONTAINER),要么仅指定容器端口(选择临时主机端口)。
所以尝试:
ports:
- "5000:<port in ASPNETCORE_URLS>"
# e.g.
# - "5000:80"
# - "44388:443"