我在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_RESPONSE在Chrome.
只需更新您的入口点,不需要更改代码:
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版本是否也是这种情况.
| 归档时间: |
|
| 查看次数: |
5464 次 |
| 最近记录: |