mongodb - 为什么我无法访问在 Azure Web 应用程序的 docker 容器中运行的 mongodb?
问题描述
例如,我想从 dockerhubmongo:3.6
或mongo: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。
解决方案
您可以使用 Robomongo 或任何其他类似应用程序访问您的数据库,使用您必须创建新连接的 Ip 和端口。
推荐阅读
- appium - 如何让 Webdriverio 与 appium-desktop 检查器一起使用?
- webstorm - 如何在 WebStorm 控制台中禁用换行?
- asp.net-core - NavigationManager.Uri 根本不会更新,除非页面被刷新。如何在 Blazor Server 中获取真实的当前 URI?
- python - Django 模型:从两个选项中选择一个 FK(只有一个)
- java - Selenium Java Lib 未在 Gradle 中导入
- reactjs - 用 Meteor js 语法描述 React componentDidMount()
- javascript - ReactJS根据滚动到具有动态高度的部分更改导航栏颜色
- python - 用 Python 编写 Discord 机器人 - 如何让它过滤垃圾邮件?
- ip - 在 NextJS 上获取客户端 IP 并使用 SSR
- python - 在 Python 中列出所有 Google Drive 文件和文件夹并保存 ID