【问题标题】:dotnet core docker container - Unable to bind to https://localhost:5001 on the IPv6 loopback interfacedotnet core docker container - 无法绑定到 IPv6 环回接口上的 https://localhost:5001
【发布时间】:2018-10-09 18:10:57
【问题描述】:

我为 .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'.

其实它说的是warn,但是结果是一样的,当我去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 连接。

【问题讨论】:

    标签: docker .net-core


    【解决方案1】:

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

    抛开启动问题不谈,您确实需要使容器在 0.0.0.0(或 ::0,如果 IPv6 工作)上侦听的选项。如果它绑定到 localhost,它将无法从其容器外部访问,包括从其他容器和主机。

    【讨论】:

    • 你来这里了吗?那是我从椅子上掉下来。我已经尝试了几个小时,但现在我发现我把端口弄混了。很大的叹息。但是非常感谢您指出这一点!
    • 要明确:它确实适用于 0.0.0.0 部分。对我来说看起来很奇怪,不知道为什么会这样,但它确实有效!
    猜你喜欢
    • 2020-04-26
    • 2021-04-26
    • 2020-03-31
    • 2020-09-16
    • 2018-12-13
    • 2018-01-17
    • 1970-01-01
    • 2020-05-20
    相关资源
    最近更新 更多