无法从localhost访问docker容器内的Web API

问题描述 投票:0回答:2

我知道有很多关于此的讨论,但是所提出的解决方案都没有对我有用,所以至少我是否应该知道我做错了什么或者我遇到了限制。

步骤1.我从Visual Studio创建了默认的.NET Core 2.0 WEB API项目,这里没什么特别的,输出类型设置为Console Application,从Visual Stuido 2017社区运行OK。

步骤2.我安装了最新的Docker Toolbox,因为我运行的是Windows 10 Home Edition,它也安装了Virtual Box。

第3步。我在sln旁边添加了以下docker文件:

    FROM microsoft/aspnetcore-build:2.0

    WORKDIR /app

    EXPOSE 80

    COPY . .

    RUN dotnet restore

    RUN dotnet build

    WORKDIR /app/DockerSample

    ENTRYPOINT dotnet run
  • 下一个

步骤4.我使用'docker build -t sample1'之类的命令成功构建映像。

步骤5.容器成功启动运行,它由以下命令'docker run -d -p 8080:80 sample1'启动

步骤6.使用命令docker logs c6提取有关容器的信息显示以下信息:

enter image description here

这里有趣的是服务正在侦听的地址,这似乎与我直接从Visual Studio运行服务时获得的地址相同。

这是虚拟机内运行的虚拟机的服务地址吗?为什么端口不是8080或80,就像我在“run”命令中提到的那样?

容器看起来不错,类似于:

enter image description here

第7步。

现在开始试图从Windows 10机器上点击服务的乐趣,不可能使用像http://localhost:8080/values/api这样的调用我也试过像http://192.168.99.100:8080/values/api这样的调用,其中192.168.99.100是默认泊坞机的地址。

我也试过像'http://172.17.0.2:8080/values/api'这样的东西,在这个地址是在'docker inspect a2'之后得到的,将端口改为80并没有帮助:)。试图将端口号更改为80或58954,红色显示为聆听,但没有帮助。 Windows防火墙或任何其他防火墙也已停止。

我试图从VirtualBox向前移动有类似的东西

enter image description here

尝试为主机和来宾更改它们之间的80和8080端口也不起作用。

基本上我找到的所有建议的解决方案都没有让我有机会从我的Windows机器上获得服务。

主要是我遵循这个教程https://www.stevejgordon.co.uk/docker-for-dotnet-developers-part-2,它解释了应该做什么,只是在某些时候使用Docker Desktop for Windows,因此Docker Toolbox被遗忘。

你知道我应该怎么做才能从docker容器中获取服务吗?

docker .net-core virtualbox asp.net-core-webapi
2个回答
2
投票

在docker compose(visual studio add docker integration“docker-compose.yml”)中设置:

version: '3.4'
   services:
      webapi.someapi:
        image: ${DOCKER_REGISTRY-}somenamesomeapi
        build:
          context: .
          dockerfile: ../webapi/Dockerfile
        environment:
          - ASPNETCORE_URLS=https://+:443;http://+:80
          - ASPNETCORE_HTTPS_PORT=443
        ports:
          - "80:80"
          - "443:443"

在午餐设置中指定您的应用程序在端口80和443 https上启动

Docker for visual studio代码:https://marketplace.visualstudio.com/items?itemName=PeterJausovec.vscode-docker

按照以下步骤来协调您的容器:https://marketplace.visualstudio.com/items?itemName=PeterJausovec.vscode-docker


0
投票

对于您的问题,它是由您在Development环境下运行容器引起的,该环境没有使用端口80作为应用程序。

对于FROM microsoft/aspnetcore-build:2.0,似乎你无法将ASPNETCORE_ENVIRONMENT改为Production

对于解决方案,您可以更改您的docker文件,如下所示,它使用microsoft/aspnetcore:2.0更改基本图像。

FROM microsoft/aspnetcore:2.0 AS base
WORKDIR /app
EXPOSE 80

FROM microsoft/aspnetcore-build:2.0 AS build
WORKDIR /src
COPY ["TestAPI/TestAPI.csproj", "TestAPI/"]
RUN dotnet restore "TestAPI/TestAPI.csproj"
COPY . .
WORKDIR "/src/TestAPI"
RUN dotnet build "TestAPI.csproj" -c Release -o /app

FROM build AS publish
RUN dotnet publish "TestAPI.csproj" -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "TestAPI.dll"]
© www.soinside.com 2019 - 2024. All rights reserved.