打开 Azure Web App for Containers 端口?
Posted
技术标签:
【中文标题】打开 Azure Web App for Containers 端口?【英文标题】:Opening Azure Web App for Containers ports? 【发布时间】:2018-11-26 09:34:24 【问题描述】:我有一个在 Azure 上的 LinuxVM 中运行的第 3 方 Tomcat 服务器映像/容器。 LinxVM 实际上是作为通过 docker-compose 脚本运行的 2 个图像(nginx 负载平衡器)开始的,但是为了在 web 应用程序上测试它,我只需要一个 tomcat 图像。现在,撰写脚本使用密钥:
ports:
- 80:8090
- 8445:8443
在虚拟机中,我可以运行 docker-compose 脚本并点击http://mypage:80
,它工作得很好。我也可以跑:
docker run -d -p <somePort>:8090 --name tomcat_1 <myrepo/myimage>
然后我可以使用http://mypage:<somePort>
访问我的站点,无论我想将哪个端口映射到容器。这一切都很好。
现在,通过 Azure Web 应用程序,我正在使用用于容器的 Azure Web 应用程序 --> Docker Compose(预览版)。我的撰写脚本看起来像:
version: "3.0"
services:
pdfd-tomcat:
image: <myrepo/myimage>
build:
context: .
args:
INCLUDE_DEMO: 'true'
LIBRE_SUPPORT: 'false'
html_SUPPORT: 'false'
container_name: Blackbox
environment:
TRN_PDFNET_KEY:
TRN_DB_TYPE: SQLITE
TRN_DB_LINK:
TRN_BALANCER_COOKIE_NAME: HAPROXID
TRN_DEBUG_MODE: 'false'
ports:
- 80:8090
- 8445:8443
我已经公开了 80:8090,因为我读过 Azure Web Apps 默认只公开端口 80 和 443。但是,一旦 Web 应用程序启动,我就无法从任何端口访问该站点。我已经验证在 VM 中运行相同的撰写脚本有效。现在,当我点击网络应用程序日志时,我看到了:
Status: Image is up to date for <myrepo/myimage>
2018-06-17 05:38:41.298 INFO - Starting container for site
2018-06-17 05:38:41.298 INFO - docker run -d -p 18455:8090 --name tomcat_1 -e WEBSITE_SITE_NAME=<mywebsite> -e WEBSITE_AUTH_ENABLED=False -e WEBSITE_ROLE_INSTANCE_ID=0 -e WEBSITE_INSTANCE_ID=<stuff goes here>
2018-06-17 05:38:41.298 INFO - Logging is not enabled for this container.
Please use https://aka.ms/linux-diagnostics to enable logging to see container logs here.
2018-06-17 05:38:56.994 INFO - Started multi-container app
2018-06-17 05:38:57.008 INFO - Container tomcat_1 for site <mywebsite> initialized successfully.
所以,它似乎正在尝试将外部端口:18455 映射到我的内部 8090 端口。为什么?此外,如果我尝试通过该端口访问我的网站,我不能。每次应用部署/重新启动时,它都会映射一个不同的外部端口。
另外,如果我回溯到“应用程序设置”并使用键/值:WEBSITES_PORT:<current externally mapped port>
,它实际上没有任何效果。然后,如果应用程序重新启动/重新部署,我可以看到 WEBSITES_PORT:<port>
是 previous 端口映射的,但由于这会改变每次部署,当前外部端口和 WEBSITES_PORT
值永远不会匹配。我什至不知道它是否有效。
到底是如何让这个以一种确定的方式工作的呢?如果需要,我可以提供其他材料。
【问题讨论】:
【参考方案1】:这归结为将 Tomcat 9.0+ 与 Docker 一起使用时的权限问题。
Permission problem while running tomcat as a non-root user
Dockerfile 将创建一个新的用户组并添加一个用户,然后在 Tomcat 所在的文件夹中授予该用户权限。如果您通过docker exec /bin/bash
跳入容器并检查权限,它们看起来都非常好。但是,日志会显示 Tomcat 无法访问这些文件夹。
一旦我按照 Empinator 在链接中描述的方式实施了修复,一切正常(使用 root 也可以)。
【讨论】:
以上是关于打开 Azure Web App for Containers 端口?的主要内容,如果未能解决你的问题,请参考以下文章
Web API系列教程3.10 — 实战:处理数据(公布App到Azure App Service)
有些东西阻止了Azure上Ubuntu localhost的流量
Azure 应用服务如何从App Service for Linux 的环境中下载Container中非Home目录下的文件呢?
将图像从Web APi [Azure Mobile APP]上载到Azure Web App中的文件夹
将 Azure Web 应用程序移入新的 Azure 应用程序服务计划?
迁移到 Azure App Service 和 Azure Database for MySQL 灵活服务器后,Wordpress 网站速度极慢