我知道对此有很多讨论,但所提出的解决方案都不适合我,所以我至少必须知道我是否做错了什么或遇到了限制。
第 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
提取有关容器的信息
显示以下信息:
这里有趣的是服务正在监听的地址,这似乎与我直接从 Visual Studio 运行服务时获得的地址相同。
这是在 Virtual box 内运行的虚拟机的服务地址吗?为什么端口不是我在“run”命令中提到的 8080 或 80?
容器看起来不错,类似于:
第 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 进行转发,具有类似的内容
尝试更改主机和 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/