【发布时间】:2018-11-12 22:58:27
【问题描述】:
我有一个 .NET Core 2.1 API,当它在 Windows 中通过 Visual Studio 运行时,它会从浏览器接收 HTTP GET 并成功地从 MySQL 数据库返回数据。
我一直在尝试将 API 添加到 Docker 容器(在 Ubuntu 中) - 这可以构建,但我无法从浏览器访问 API:
我的尝试:
- 检查可用端口。以下是相关输出:
- 使用其他浏览器连接:在 Chromium 中,它显示“无法访问此站点:localhost 意外关闭了连接。”
- 在浏览器中测试未使用的端口以查看这是否返回不同的消息 - 对于 Firefox,未使用的端口返回“无法连接”而不是“安全连接失败”,并且在 Chromium 中它们返回“本地主机拒绝连接”。而不是“localhost 意外关闭了连接。”
- 在 Firefox 中,将“security.tls.insecure_fallback_hosts”配置为“localhost”。
- 在 docker-compose.yml 中仔细检查端口是否正确映射 - 在相关容器的“端口”下,44329 映射到 44329。
- 在 API 启动时运行数据库查询并记录结果:这是成功的。我运行
docker-compose up,API 启动,连接到数据库容器,并将 SQL 查询的结果记录到文本文件中。所以问题不太可能与数据库有关。 - 记录 GET 请求:在 Windows 内部,GET 请求已成功记录,但在 Ubuntu Docker 容器中却没有。
这可能是相关的:在 Windows 中,只有从 Visual Studio 启动 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.
我在这里看到什么样的问题?
【问题讨论】:
-
docker ps的输出是什么 -
已将其添加到问题的末尾
-
会不会是防火墙问题?
-
似乎不是 - ufw 被禁用,iptables 被 Docker 配置为允许这些端口。
-
当您尝试连接到端口 80 时,您是否发布了端口?上面的输出没有显示端口 80。
标签: docker asp.net-core .net-core docker-compose ubuntu-16.04