我是docker的新手,真的很想体验它的功能。在这里,我想在docker中运行(托管)一个简单的Asp.net核心web api(使用docker run),而不是使用IIS运行它。
这很简单 …
在ENTRYPOINT语句之前,请尝试添加
ENV ASPNETCORE_URLS=http://+:50633 DOTNET_RUNNING_IN_CONTAINER=true
所以它看起来像这样:
FROM base AS final WORKDIR /app COPY --from=publish /app . ENV ASPNETCORE_URLS=http://+:50633 DOTNET_RUNNING_IN_CONTAINER=true ENTRYPOINT ["dotnet", "HelloDocker.dll"]
这有帮助吗?
看起来我应该在docker的论坛中发布这个问题,所有Docker专家都对此感兴趣(与此字段中的SO相比)。 不知道为什么我无法从docker的论坛中搜索解决方案,但在尝试搜索之后 Now listening on: http://[::]:80 它让我在这里的docker论坛中找到了一个非常类似的问题 https://forums.docker.com/t/unable-to-launch-the-net-core-website-in-docker/48129
Now listening on: http://[::]:80
所以我通过使用尝试了一种解决方案 docker inspect [container_id] 首先找到容器的IP并使用该IP成功访问Web API :)
docker inspect [container_id]
容器的IP可以在。中找到 Networks 部分:
Networks
"Networks": { "nat": { "IPAMConfig": null, "Links": null, "Aliases": null, "NetworkID": "e336becc4500435f7338ebd8f84fef47ec2fc247f77bc82b6dbf49553f68afd5", "EndpointID": "a8ede68e3f4bb02392c295901f65d50f0ee014c114f564768d9c82a4644b0218", "Gateway": "172.30.240.1", "IPAddress": "172.30.242.85", "IPPrefixLen": 16, "IPv6Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "MacAddress": "00:15:5d:5a:29:8d", "DriverOpts": null } }
我用来测试web api的正确地址是:
http://172.30.242.85/api/values
的 UPDATE 强> :
我假设了 EXPOSE 50633 表示docker将通过端口公开web api 50633 所以我运行命令 docker run -t -p 80:50633 hellodocker:dev 。
EXPOSE 50633
50633
docker run -t -p 80:50633 hellodocker:dev
但实际上它在这里暴露的端口仍然是默认端口 80 (不知道为什么)。但至少这是有道理的。因此,要映射docker和主机之间的端口,我们使用该命令 docker run -t -p:80:80 hellodocker:dev 代替。 我试过了,它完美适用 http://localhost/api/values 。
80
docker run -t -p:80:80 hellodocker:dev
http://localhost/api/values
我认为之前使用的命令 docker run -t -p:80:50633 hellodocker:dev 有无用的端口映射(至少用于测试来自主机的web api),因为 http://172.30.242.85/api/values 如果docker实际运行web api以侦听默认端口,则应该有效 80 。
docker run -t -p:80:50633 hellodocker:dev