我有一个.NET Core 2.1 API,当通过Windows中的Visual Studio运行时,它从浏览器接收HTTP GET并成功从MySQL DB返回数据。
我一直在尝试将API添加到Docker容器(在Ubuntu内部) - 这构建,但我无法从浏览器访问API:
我尝试了什么:
docker-compose up
,API启动,连接到数据库容器,并将SQL查询的结果记录到文本文件中。所以这个问题不太可能与数据库有任何关系。这可能是相关的:在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访问,在那里你得到的信息根本不是冷却: 点击' ADVANCED'允许您继续使用API。
来自' 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.
我在这看什么样的问题?
答案 0 :(得分:1)
正如评论中的多个人所指出的那样(感谢sp0gg,Martin Ullrich和Daniel Lerps),API错误地在端口80上侦听。
解决方案是将端口5000映射到docker-compose.yml中的44容器容器,并在启动ASP.NET API时修改Dockerfile以将端口作为参数传递给dotnet:
ENTRYPOINT ["dotnet", "webapi.dll", "--urls", "http://*:5000;http://*:5001"]