当前位置: 首页 > 知识库问答 >
问题:

Docker dotnet运行端口未映射,windows 10主机,linux容器

公西博实
2023-03-14

我遵循的https://app.pluralsight.com/library/courses/docker-web-development/table-of-contents使用旧的微软/aspnetcore-构建镜像,但我运行核心2.1,所以我使用微软/dotnet: 2.1-sdk代替。

我正在运行的命令是:

docker run-it-p8080:5001-v${pwd}:/app-w“/app”microsoft/dotnet:2.1-sdk

然后一旦进入TTY,我做一个dotnet运行,它给我以下输出:

使用 /app/Properties/launchSettings.json.的启动设置。

信息:微软。AspNetCore。数据保护。密钥管理。XmlKeyManager[0]

用户配置文件可用。使用“/root/”。aspnet/DataProtection密钥作为密钥存储库;密钥在静止时不会被加密。

信息:微软。AspNetCore。数据保护。密钥管理。XmlKeyManager[58]

创建密钥{5445e854-c1d9-4261-82f4-0fc3a7543e0a},创建日期为2018-12-14 10:41:13Z,激活日期为2018-12-14 10:41:13Z,到期日期为2019-03-14 10:41:13Z。

警告:微软。AspNetCore。数据保护。密钥管理。XmlKeyManager[35]

没有配置XML加密程序。密钥{5445e854-c1d9-4261-82f4-0fc3a7543e0a}可以以未加密的形式保存到存储器中。

信息:微软。AspNetCore.数据保护。仓库。FileSystemXmlRepository[39]

将数据写入文件/root/. aspnet/DataProte-Keys/key-5445e854-c1d9-4261-82f4-0fc3a7543e0a.xml。

警告:微软。AspNetCore。服务器红隼[0]

无法绑定到IPv6环回接口上的https://localhost:5001:无法分配请求的地址。

警告:微软。AspNetCore。服务器红隼[0]

无法绑定到IPv6环回接口上的http://localhost:5000:无法分配请求的地址。

托管环境:开发

内容根路径:/app

现在收听:https://localhost:5001

现在收听:http://localhost:5000

应用程序启动。按Ctrl C关闭。

然后,当我在主机上打开浏览器并导航到http://localhost:8080我收到“此页面不工作”“本地主机未发送任何数据”“错误\u空\u响应”

我也尝试了两种不同的端口组合,得到了相同的结果。

谁能看出我哪里出错了?或者你有什么想法/建议吗?

共有1个答案

芮叶秋
2023-03-14

不确定这个问题是否仍然与您相关,但我也遇到了这个问题,并将我的解决方案留给了其他人。我在下一个docker命令中使用了PowerShell(几乎和你的命令一样,只是使用了内部端口90而不是5000,并使用了--rm开关,当容器退出时,它会自动删除容器):

docker run --rm -it -p 8080:90 -v ${pwd}:/app -w "/app" microsoft/dotnet /bin/bash

之后,我得到了交互式bash shell,当键入dotnet run时,我得到了与您相同的输出,并且无法通过localhost:8080到达容器中的站点。

我通过使用UseUrls方法或--url命令行参数解决了这个问题。它们(UseUrls方法或--url命令行参数)指示服务器应侦听请求的IP地址或主机地址以及端口和协议。以下是对我有效的解决方案的描述:

    在Program.cs中编辑CreateWebHostBuilder方法,如下所示:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
                WebHost.CreateDefaultBuilder(args)
                   .UseUrls("http://+:90") //for your case you should use 5000 instead of 90
                    .UseStartup<Startup>();

如果需要,可以使用下一个语法指定几个端口。UseUrls("超文本传输协议://: 90;超文本传输协议://: 5000")
使用这种方法,您只需在bash shell中键入dotnet run,然后您的容器将可以通过localhost:8080访问。

但是使用前面的方法,您可以更改源代码的默认行为,您可以忘记这些行为,然后可能需要在将来进行调试和修复
所以我更喜欢第二种方法,不改变源代码。键入docker命令并获取交互式bash shell而不是dotnet run后,使用下面的--url参数键入它(在您的情况下,使用端口5000而不是90):

dotnet run--urls="超文本传输协议://: 90"

在文档中还有第三种方法,您可以使用ASPNETCORE\u url环境变量,但这种方法不适合我。我使用了下一个命令(带-e开关):

docker-run-rm-it-p8080:90-v${pwd}:/app-w”/app“-e”ASPNETCORE_url=http://:90“microsoft/dotnet/bin/bash

如果在bash中键入printenv,您将看到ASPNETCORE\u url环境变量已传递给容器,但由于某些原因,dotnet run会忽略它。

 类似资料:
  • 我有一个问题,或者最好说有两个问题。两者都依赖于Docker,并且与Docker如何处理容器主机名和端口的理解有关。 假设我有两个服务在不同的docker容器中运行,并将容器中的端口80公开到端口8081(service1)和端口8082(service2): 服务1: 8081: 80服务2: 8082: 80 现在我很清楚,从主机的角度来看,我可以通过使用公开的端口(http://localh

  • 问题内容: 我想在不同主机上的某些Docker容器中运行任务。而且我编写了一个管理器应用程序来管理容器(启动任务,停止任务,获取状态等)。容器启动后,它将向管理器发送一个http请求及其地址和端口,因此管理器将知道如何管理该容器。 由于同一主机上可能运行着多个容器,因此它们将被映射到不同的端口。要在我的经理上注册一个容器,我必须知道每个容器映射到哪个端口。 如何 在 Docker容器中获取映射的端

  • 本文向大家介绍Docker 给运行中的容器设置端口映射的方法,包括了Docker 给运行中的容器设置端口映射的方法的使用技巧和注意事项,需要的朋友参考一下 一、概念 Docker 端口映射即映射容器内应用的服务端口到本机宿主机器。 二、实现 当容器中运行一些网络应用,要让外部访问这些应用时,可以通过 -P 或 -p 参数两种方式来指定端口映射。 1. 随机映射 使用 -P 参数时,Docker 会

  • 我有一个Spring Boot应用程序,其中包括Spring Actuator在 我的配置是这样的 但是,当我尝试使用检查endpoint时,我的浏览器显示 在我的IntelliJ想法中,我可以看到执行器选项卡,它似乎在那里工作,但没有URL映射。有人能帮忙吗?

  • 我有两个dockerated应用程序,它们是docker网络的一部分,都在8080端口上启动。我需要它们都暴露在主机上,这就是为什么我相应地暴露它们到8080和8081。 我无法控制这些应用程序(我无法更改它们的端口),它们只是端到端测试套件的一部分,需要运行这些套件才能执行测试。 问题:根据阉羊的不同,我在docker容器(同一个docker-comuse文件中的3d应用程序)或本地执行测试,我

  • 我有一个基本的docker compose设置,包括以下内容: docker网桥子网从192.168.50.0/24开始 4项服务:兔子、spring配置、票价、入住 每个服务都正确设置了主机名,并且能够在子网(192.168.50.0)中找到彼此。IP动态地归属于这个子网,它们都从各自容器中的8080端口开始 从主机上可以看到网桥网络,并且可以使用其ip访问容器的每个实例 如果不将8080以外的