我知道对此有很多讨论,但是没有一个提议的解决方案对我有用,因此我至少必须知道我做错了什么还是遇到了限制。
步骤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
提取有关容器的信息
显示了以下信息:
有趣的是该服务正在侦听的地址,这似乎与我直接从Visual Studio运行该服务时获得的地址相同。
这是在“虚拟”框中运行的虚拟机的服务地址吗?为什么端口不是我在“运行”命令中提到的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 inspect a2”之类的调用后获得了IP地址,将端口更改为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容器中访问服务吗?
答案 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"]