我在Azure上的LinuxVM中运行第三方Tomcat服务器映像/容器。 LinxVM实际上是通过docker-compose脚本运行的2个映像(NGINX loadbalancer),但是为了在webapp上测试这个,我已经只对单个tomcat映像进行了测试。现在,compose脚本使用密钥:
ports:
- 80:8090
- 8445:8443
在VM中,我可以运行docker-compose脚本并点击http://mypage:80
,它运行正常。我也可以跑:
docker run -d -p <somePort>:8090 --name tomcat_1 <myrepo/myimage>
然后我可以使用http://mypage:<somePort>
访问我的网站,无论我想将哪个端口映射到容器。这一切都很有效。
现在,使用Azure Web App,我使用Azure Web App for Containers - &gt; 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端口。为什么?此外,如果我尝试通过该端口访问我的网站,我无法做到。每次应用程序部署/重新启动时,它都会映射不同的外部端口。
此外,如果我追溯到“应用程序设置”&#39;并使用键/值:WEBSITES_PORT:<current externally mapped port>
它几乎没有效果。然后,如果应用程序重新启动/重新部署,我可以看到WEBSITES_PORT:<port>
是上一个端口映射的内容,但由于这会更改每个部署,当前外部端口和{{1值永远不会匹配。我甚至都不知道它是否有效。
如何确保以确定的方式工作?如果需要,我可以提供其他材料。
答案 0 :(得分:0)
这归结为将Tomcat 9.0+与Docker一起使用时的权限问题。
Permission problem while running tomcat as a non-root user
Dockerfile将创建一个新的用户组并添加一个用户,然后在Tomcat存在的文件夹中授予该用户权限。如果您通过docker exec /bin/bash
跳入容器并检查了权限,那么它们似乎都很好。但是,日志显示Tomcat无法访问这些文件夹。
一旦实现了Empinator在链接中描述的修复程序,一切正常(使用root也有效)。