无法从本地主机访问 docker 容器内的 Web API
Could not access Web API inside docker container from localhost
我知道有很多关于此的讨论,但是 none 提议的解决方案对我有用,所以我必须至少知道我是做错了什么还是遇到了限制。
第一步。
我从 Visual Studio 创建了默认的 .NET Core 2.0 WEB API 项目,这里没有什么特别的,输出类型设置为控制台应用程序,运行从 Visual Stuido 2017 Community 正常。
第 2 步。我安装了最新的 Docker Toolbox,因为我是 运行ning Windows 10 家庭版,还安装了 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
提取有关容器的信息
显示了以下信息:
这里有趣的是服务正在监听的地址,这似乎与我在 运行 直接从 Visual Studio 连接服务时获得的地址相同。
这是虚拟机中 运行ning 在 Virtual box 中的服务地址吗?为什么端口不是我在 "run" 命令中提到的 8080 或 80?
容器看起来不错,类似于:
第 7 步
现在开始尝试从 Windows 10 台机器访问服务,使用像 http://localhost:8080/values/api I also tried calls like http://192.168.99.100:8080/values/api 这样的调用是不可能的,其中 192.168.99.100 是默认 docker 机器的地址。
我也尝试过像“http://172.17.0.2:8080/values/api”这样的东西,其中 IP 地址是在像 'docker inspect a2' 这样的调用之后获得的,将端口更改为 80 没有帮助:)。
尝试将端口号更改为 80 或 58954 ,即以红色显示的端口号,但没有帮助。此外 Windows 防火墙或任何其他防火墙已停止。
我试图从 VirtualBox 向前移植有类似
的东西
尝试更改主机和来宾之间的 80 和 8080 端口也没有用。
基本上 none 我发现的建议解决方案没有让我有机会从我的 Windows 机器上访问该服务。
主要是我在学习本教程 https://www.stevejgordon.co.uk/docker-for-dotnet-developers-part-2,它很好地解释了应该做什么,只是在某些时候使用 Docker 桌面 Windows 所以 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
Docker 对于 visual studio 代码:https://marketplace.visualstudio.com/items?itemName=PeterJausovec.vscode-docker
按照以下步骤编排您的容器:
https://marketplace.visualstudio.com/items?itemName=PeterJausovec.vscode-docker
对于您的问题,这是由于您运行 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"]
我知道有很多关于此的讨论,但是 none 提议的解决方案对我有用,所以我必须至少知道我是做错了什么还是遇到了限制。
第一步。 我从 Visual Studio 创建了默认的 .NET Core 2.0 WEB API 项目,这里没有什么特别的,输出类型设置为控制台应用程序,运行从 Visual Stuido 2017 Community 正常。
第 2 步。我安装了最新的 Docker Toolbox,因为我是 运行ning Windows 10 家庭版,还安装了 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
提取有关容器的信息
显示了以下信息:
这里有趣的是服务正在监听的地址,这似乎与我在 运行 直接从 Visual Studio 连接服务时获得的地址相同。
这是虚拟机中 运行ning 在 Virtual box 中的服务地址吗?为什么端口不是我在 "run" 命令中提到的 8080 或 80?
容器看起来不错,类似于:
第 7 步
现在开始尝试从 Windows 10 台机器访问服务,使用像 http://localhost:8080/values/api I also tried calls like http://192.168.99.100:8080/values/api 这样的调用是不可能的,其中 192.168.99.100 是默认 docker 机器的地址。
我也尝试过像“http://172.17.0.2:8080/values/api”这样的东西,其中 IP 地址是在像 'docker inspect a2' 这样的调用之后获得的,将端口更改为 80 没有帮助:)。 尝试将端口号更改为 80 或 58954 ,即以红色显示的端口号,但没有帮助。此外 Windows 防火墙或任何其他防火墙已停止。
我试图从 VirtualBox 向前移植有类似
的东西尝试更改主机和来宾之间的 80 和 8080 端口也没有用。
基本上 none 我发现的建议解决方案没有让我有机会从我的 Windows 机器上访问该服务。
主要是我在学习本教程 https://www.stevejgordon.co.uk/docker-for-dotnet-developers-part-2,它很好地解释了应该做什么,只是在某些时候使用 Docker 桌面 Windows 所以 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
Docker 对于 visual studio 代码:https://marketplace.visualstudio.com/items?itemName=PeterJausovec.vscode-docker
按照以下步骤编排您的容器: https://marketplace.visualstudio.com/items?itemName=PeterJausovec.vscode-docker
对于您的问题,这是由于您运行 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"]