无法在本地Docker Container上访问Asp.Net Core

Jed*_*i31 5 asp.net docker

我在asp.net核心创建了一个应用程序并创建了一个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"]
Run Code Online (Sandbox Code Playgroud)

然后,我使用以下命令构建了我的图像

docker build -t jedidocker/first .
Run Code Online (Sandbox Code Playgroud)

然后,我使用以下命令创建了一个容器

docker run -t -d -p 5000:5000 jedidocker/first
Run Code Online (Sandbox Code Playgroud)

但是当我将以下url运行到我的主机浏览器中时

http://localhost:5000/
Run Code Online (Sandbox Code Playgroud)

我有一个 ERR_EMPTY_RESPONSE

这是网络问题吗?我该如何解决?

PS:我的Windows版本是10.0.10586

Ser*_*rov 16

我有同样的问题,并找到了解决方案.您需要更改默认侦听主机名.默认情况下,应用程序将侦听localhost,忽略来自容器外部的任何传入请求.更改您的代码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();
    }
}
Run Code Online (Sandbox Code Playgroud)

更多信息:

https://medium.com/trafi-tech-beat/running-net-core-on-docker-c438889eb5a#.hwhoak2c0

确保使用-p带有端口绑定的标志运行容器.

docker run -p 5000:5000 <containerid>
Run Code Online (Sandbox Code Playgroud)

在撰写本文时,似乎是

EXPOSE 5000:5000
Run Code Online (Sandbox Code Playgroud)

命令与-p命令的效果不同.我也没有用-P(大写)取得真正的成功.

编辑8/28/2016:

有一点需要注意.如果您使用docker compose与-d(分离)模式,则dotnet run命令可能需要一段时间才能启动服务器.直到把它完成执行命令(和之前的任何其他),您将收到ERR_EMPTY_RESPONSEChrome.


Bal*_*ako 6

只需更新您的入口点,不需要更改代码:

ENTRYPOINT ["dotnet", "run", "--server.urls", "http://*:5000"]
Run Code Online (Sandbox Code Playgroud)

Windows Server 2016上的默认Docker网络是NAT,因此您可能希望使用可以找到的IP docker inspect <container name/ID>.不确定其他Windows版本是否也是这种情况.