docker - 无法从本地主机访问 docker 容器内的 Web API

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

我知道对此有很多讨论,但所提出的解决方案都不适合我,所以我至少必须知道我是否做错了什么或遇到了限制。

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

第 2 步。由于我运行的是 Windows 10 家庭版,所以我安装了最新的 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 log c6 提取有关容器的信息 显示以下信息:

enter image description here

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

这是在 Virtual box 内运行的虚拟机的服务地址吗?为什么端口不是我在“run”命令中提到的 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检查a2”这样的调用之后获得IP地址,将端口更改为80并没有帮助:)。 尝试将端口号更改为 80 或 58954 ,其中红色显示的端口号为正在监听,但没有帮助。 Windows 防火墙或任何其他防火墙也被停止。

我尝试从 VirtualBox 进行转发,具有类似的内容

enter image description here

尝试更改主机和 guest 之间的 80 和 8080 端口也不起作用。

基本上,我找到的所有建议解决方案都没有让我有机会从我的 Windows 计算机访问该服务。

我主要是按照这个教程https://www.stevejgordon.co.uk/docker-for-dotnet-developers-part-2这很好地解释了应该做什么,只是在某些时候使用 Windows 的 Docker 桌面,因此 Docker 工具箱被抛在了后面。

你知道我应该做什么才能从 docker 容器访问该服务吗?

最佳答案

在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

关于docker - 无法从本地主机访问 docker 容器内的 Web API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54856072/

相关文章:

docker - 如何为dockerized Rasa-NLU配置要公开的端口

.net - 使用.NET 5 CancellationToken调用可以在主线程上超时的方法

c# - 错误 MSB3823 : Non-string resources require the property GenerateResourceUsePreserializedResources to be set to true

ubuntu - 无法在 VirtualBox 上启动 Ubuntu18.04 [VERR_NEM_VM_CREATE_FAILED]

networking - 如何在局域网中连接多个虚拟机

python - FastAPI WebSocket无法处理大量数据输入?

gradle - 在Mac上对Gradle构建进行Docker化

docker - Docker镜像的摘要是如何计算的?

unit-testing - NUnit 与 .NetCore - 我可以将测试结果写入 xml 或 trx 文件吗

ssh - Vagrant 在 SSH 身份验证方法 : private key 处卡住(超时)