我知道有很多关于此的讨论,但是所提出的解决方案都没有对我有用,所以至少我是否应该知道我做错了什么或者我遇到了限制。
步骤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
提取有关容器的信息显示以下信息:
这里有趣的是服务正在侦听的地址,这似乎与我直接从Visual Studio运行服务时获得的地址相同。
这是虚拟机内运行的虚拟机的服务地址吗?为什么端口不是8080或80,就像我在“run”命令中提到的那样?
容器看起来不错,类似于:
第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向前移动有类似的东西
尝试为主机和来宾更改它们之间的80和8080端口也不起作用。
基本上我找到的所有建议的解决方案都没有让我有机会从我的Windows机器上获得服务。
主要是我遵循这个教程https://www.stevejgordon.co.uk/docker-for-dotnet-developers-part-2,它解释了应该做什么,只是在某些时候使用Docker Desktop for Windows,因此Docker Toolbox被遗忘。
你知道我应该怎么做才能从docker容器中获取服务吗?
在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
对于您的问题,它是由您在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"]