[英]Cannot acces Asp.Net Core on local Docker Container
我已经在 asp.net core 中创建了一个应用程序并创建了一个 dockerfile 来生成本地图像并运行它。
FROM microsoft/dotnet:latest
COPY . /app
WORKDIR /app
RUN ["dotnet", "restore"]
RUN ["dotnet", "build"]
EXPOSE 5000/tcp
ENTRYPOINT ["dotnet", "run", "--server.urls", "http://0.0.0.0:5000"]
然后,我使用以下命令构建了我的图像
docker build -t jedidocker/first .
然后,我使用以下命令创建了一个容器
docker run -t -d -p 5000:5000 jedidocker/first
但是当我在主机浏览器中运行以下网址时
http://localhost:5000/
我有一个ERR_EMPTY_RESPONSE
是网络问题吗? 我该如何解决?
PS:我的windows版本是10.0.10586
我遇到了同样的问题,并找到了解决方案。 您将需要更改默认的侦听主机名。 默认情况下,应用程序将侦听本地主机,忽略来自容器外部的任何传入请求。 更改program.cs
的代码以侦听所有来电:
public class Program
{
public static void Main(string[] args)
{
var host = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseUrls("http://*:5000")
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
host.Run();
}
}
更多信息:
https://medium.com/trafi-tech-beat/running-net-core-on-docker-c438889eb5a#.hwhoak2c0
确保使用带有端口绑定的-p
标志运行容器。
docker run -p 5000:5000 <containerid>
在撰写本文时,似乎
EXPOSE 5000:5000
命令与-p
命令的效果不同。 我也没有使用 -P(大写)取得真正的成功。
2016 年 8 月 28 日编辑:
需要注意的一件事。 如果您在 -d(分离)模式下使用 docker compose,则dotnet run
命令可能需要一些时间来启动服务器。 在执行完命令(以及之前的任何其他命令)之前,您将在Chrome
收到ERR_EMPTY_RESPONSE
。
只需按如下方式更新您的入口点,无需更改代码:
ENTRYPOINT ["dotnet", "run", "--server.urls", "http://*:5000"]
Windows Server 2016 上的默认 Docker 网络是 NAT,因此您可能希望使用可以通过docker inspect <container name/ID>
找到的 IP。 不确定其他 Windows 版本是否也是这种情况。
这是在 ASP.NET 3.1 中对我有用的内容
在 Dockerfile 上需要指定 ENV ASPNETCORE_URLS
ENV ASPNETCORE_URLS http://*:5000
然后暴露端口
EXPOSE 5000
使用HostUrl
作为环境变量
appsettings.json
{
"Logging": {
"IncludeScopes": false,
"Debug": {
"LogLevel": {
"Default": "Warning"
}
}
},
"HostUrl": "http://*:8080"
}
program.cs
public class Program
{
public static void Main(string[] args)
{
var hosturl = configuration.GetSection("HostUrl").Value;
var host = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseUrls(hosturl)
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
host.Run();
}
}
然后,您可以覆盖HostUrl作为对环境参数docker run
docker run --rm -it -e HostUrl="http://*:80" -e DOTNET_RUNNING_IN_CONTAINER=true -e ConnectionStrings__DefaultConnection="<your_connection>" -p 80:80 <containerid>
在localhost
打开浏览器很高兴!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.