繁体   English   中英

无法从浏览器访问Docker应用程序

[英]Unable to access Docker application from browser

我有一个.NET Core 2.1 API,当通过Windows中的Visual Studio运行时,该API会从浏览器接收HTTP GET,并成功地从MySQL DB返回数据。

我一直在尝试将API添加到Docker容器(在Ubuntu内)-可以构建,但是我无法从浏览器访问API:

火狐浏览器

我尝试过的

  • 检查可用端口。 这是相关的输出:

在此处输入图片说明

  • 使用其他浏览器进行连接:在Chromium中,它说“无法访问此站点: 本地主机意外关闭了连接。”
  • 在浏览器中测试未使用的端口,以查看是否返回不同的消息-对于Firefox,未使用的端口返回“无法连接”,而不是“安全连接失败”,在Chromium中,它们返回“本地主机拒绝连接”。 而不是“ localhost意外关闭连接”。
  • 在Firefox中,将“ security.tls.insecure_fallback_hosts”配置为“ localhost”。
  • 仔细检查docker-compose.yml中的端口是否正确映射-在相关容器的``端口''下,将44329映射到44329。
  • API启动时运行数据库查询并记录结果:成功。 我运行docker-compose up ,API启动,连接到DB容器,并将SQL查询的结果记录到文本文件中。 因此,问题不太可能与数据库有关。
  • 记录GET请求:在Windows中,已成功记录GET请求,但在Ubuntu Docker容器中却未记录。

这可能是相关的:在Windows中,仅当您从Visual Studio启动API时,API才能正常工作。 如果执行dotnet webapi.dll ,则会得到此输出

...\netcoreapp2.1>dotnet webapi.dll
...
Now listening on: http://localhost:5000
Now listening on: https://localhost:5001
Application started. Press Ctrl+C to shut down.

因此,它不在44329上运行; 而是可以通过浏览器中的5001来访问它,在这里您会得到以下消息,这一点都不令人寒寒: 在此处输入图片说明 单击“高级”可以继续使用API​​。

  • 因此,我也尝试过在Ubuntu中通过5001进行连接而没有运气。

这是“ docker-compose up”的输出:

matt@Matt-Ubuntu:~/docker2$ docker-compose up
Starting docker2_mysql_1 ... done
Starting docker2_dbmodelmapper_1 ... done
Attaching to docker2_mysql_1, docker2_dbmodelmapper_1
... (mysql stuff) ...
dbmodelmapper_1  | Hosting environment: Production
dbmodelmapper_1  | Content root path: /app
dbmodelmapper_1  | Now listening on: http://[::]:80
dbmodelmapper_1  | Application started. Press Ctrl+C to shut down.
  • 看到端口80,我尝试连接到该端口,但没有成功。

  • docker ps显示的相关容器是:

    在此处输入图片说明

我在这里看什么问题?

正如多人在评论中指出的(感谢sp0gg,Martin Ullrich和Daniel Lerps),该API错误地侦听了端口80。

解决方案是在API容器的docker-compose.yml中将端口5000映射到44329,还修改Dockerfile以在启动ASP.NET API时将端口作为参数传递给dotnet:

ENTRYPOINT ["dotnet", "webapi.dll", "--urls", "http://*:5000;http://*:5001"]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM