无法从本地主机

时间:2019-02-24 20:13:33

标签: docker .net-core virtualbox asp.net-core-webapi

我知道对此有很多讨论,但是没有一个提议的解决方案对我有用,因此我至少必须知道我做错了什么还是遇到了限制。

步骤1。     我从Visual Studio创建了默认的.NET Core 2.0 WEB API项目,这里没有什么特别的地方,输出类型设置为“控制台应用程序”,在Visual Stuido 2017社区中运行正常。

步骤2。由于我正在运行Windows 10 Home Edition,所以我安装了最新的Docker Toolbox,该工具箱还安装了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?

容器看起来不错,就像:

enter image description here

第7步。

现在开始尝试从Windows 10计算机上启动服务,这很有趣,使用http://localhost:8080/values/api这样的调用是不可能的,我也尝试了http://192.168.99.100:8080/values/api这样的调用,其中192.168.99.100是默认docker计算机的地址。

我还尝试使用类似“ http://172.17.0.2:8080/values/api”的方法,其中在通过“ docker inspect a2”之类的调用后获得了IP地址,将端口更改为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容器中访问服务吗?

2 个答案:

答案 0 :(得分:2)

在docker compose(Visual Studio中添加docker集成“ 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上启动

适用于Visual Studio代码的Docker:https://marketplace.visualstudio.com/items?itemName=PeterJausovec.vscode-docker

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

答案 1 :(得分: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"]
相关问题