首页 > 解决方案 > 为什么我无法访问在 Azure Web 应用程序的 docker 容器中运行的 mongodb?

问题描述

例如,我想从 dockerhubmongo:3.6mongo:4.1在 Azure Web 应用程序中运行 mongodb docker 映像,但我无法从外部访问它。

根据 Azure 日志,docker 容器启动良好,日志显示:

docker run -d -p 29794:27017 --name mytestapp -e WEBSITE_SITE_NAME=mytestapp -e WEBSITE_AUTH_ENABLED=False -e PORT=27017 -e WEBSITE_ROLE_INSTANCE_ID=0 -e WEBSITE_HOSTNAME=mytestappurl -e WEBSITE_INSTANCE_ID=xxx -e HTTP_LOGGING_ENABLED=1 mongo:4.1

2019-06-15 19:42:49.831 INFO  - Container mytestapp for site mytestapp initialized successfully and is ready to serve requests.

据我所知,Azure Web App Service 仅支持端口 80 和 443 用于入站流量,并将内部端口(在 mongodb 的情况下:27017)映射到端口 80 或 443,具体取决于 SSL 与否。

当我通过浏览器和端口 80 访问我的网络应用程序时,我收到了消息

It looks like you are trying to access MongoDB over HTTP on the native driver port.

这表示该服务可以通过某种方式访问​​,并且正在等待端口 80 上的请求,但是当我尝试通过 mongo 连接时,例如:

mongo -host mytestappurl -port "80"  -username "root" -passwort "myrootpw" --verbose

我明白了

creating new connection to:mytestappurl:80
D NETWORK  [js] connected to server to:mytestappurl:80
I NETWORK  [js] recv(): message msgLen 1347703880 is invalid. Min 16 Max: 48000000

等等。我还尝试在 Azure App 设置中设置键/值对 WEBSITES_PORT=27017 但没有成功。相同的设置在本地运行良好,我可以按预期访问 mongodb。

标签: mongodbdockerazure-web-app-service

解决方案


您可以使用 Robomongo 或任何其他类似应用程序访问您的数据库,使用您必须创建新连接的 Ip 和端口。


推荐阅读