dotnet核心docker容器-无法绑定到IPv6回送接口上的https:// localhost:5001

时间:2018-10-09 09:33:22

标签: docker .net-core

我为.NET core创建了一个映像:

FROM microsoft/dotnet:2.1-sdk AS build-env
WORKDIR /app

EXPOSE 80 443 5000 5001 5010 5011 7000 22676

#ENTRYPOINT [ "bash"]
CMD ["bash"]

我从中运行一个容器 docker container run -it --publish 5000:8018 --name versie3001 -v //c/tijd/mount:/app michel03

进展顺利是,我看到了已挂载的文件。 当我使用dotnet new razor创建一个新网站并使用dotnet run运行它时,它尝试在端口5000/5001(默认端口)上运行,但是出现此错误:

warn: Microsoft.AspNetCore.Server.Kestrel[0]
      Unable to bind to https://localhost:5001 on the IPv6 loopback interface: 'Cannot assign requested address'.
warn: Microsoft.AspNetCore.Server.Kestrel[0]
      Unable to bind to http://localhost:5000 on the IPv6 loopback interface: 'Cannot assign requested address'.

实际上它说警告,但结果是一样的,当我进入localhost:8018时,我没有任何结果(ERR_CONNECTION_REFUSED

我在这里做什么错了?

我看到一个回答,说我应该在我的容器文件中这样做: ENTRYPOINT [ "dotnet", "watch", "run", "--no-restore", "--urls", "https://0.0.0.0:5000"]。它不会给我错误(输出为Now listening on: https://0.0.0.0:5000),这很好,但是也不会从本地计算机上的https://localhost:8018连接。

1 个答案:

答案 0 :(得分:1)

您的--publish选项向后:-p <hostPort>:<containerPort>,因此对于您的设置,您需要--publish 8018:5000

除了启动问题以外,您确实需要使容器在0.0.0.0上侦听的选项(如果IPv6有效,则为:: 0)。如果它绑定到本地主机,则将无法从其容器外部(包括其他容器和主机)访问该容器。