apache httpd端口8009后面的Docker tomcat未连接
Posted
技术标签:
【中文标题】apache httpd端口8009后面的Docker tomcat未连接【英文标题】:Docker tomcat behind apache httpd port 8009 not connecting 【发布时间】:2020-06-19 12:26:02 【问题描述】:我可能缺少一些简单的东西:
请求命中 apache httpd 容器-> 找到 ajp worker -> 在 docker 网络上找到 worker 主机-> 尝试将请求发送到 tomcat-> 失败,说 tomcat 容器未在端口 8009 上侦听
Docker-compose 看起来像
version: '2'
services:
httpd:
build:
context: .
dockerfile: httpd/Dockerfile
container_name: "http-proxy"
volumes:
- ./httpd/conf/000-default.conf:/etc/apache2/sites-available/000-default.conf
- ./httpd/conf/workers.properties:/etc/apache2/workers.properties
- ./httpd/conf/jk.conf:/etc/apache2/mods-available/jk.conf
- ./httpd/conf/apache2.conf:/etc/apache2/apache2.conf
ports:
- 80:80
tomcat:
image: tomcat:8.5.51
volumes:
- ./tomcat/conf/server.xml:/usr/local/tomcat/conf/server.xml
container_name: "app"
expose:
- 8009
workers.properties 看起来像
worker.app_worker.type=ajp13
worker.app_worker.host=app
worker.app_worker.port=8009
jk.conf 有
JkMount /app|/* app_worker
并且连接器在 tomcat server.xml 中可用
<Connector protocol="AJP/1.3"
address="::1"
port="8009"
redirectPort="8443" />
错误
Failed opening socket to (192.168.164.4:8009) (errno=111)
[error] ajp_send_request::jk_ajp_common.c (1728):
(app_worker) connecting to backend failed. Tomcat is probably not started or is listening on the wrong port
我可以确认 tomcat 正在运行。
【问题讨论】:
尝试将 --net=host 添加到 apache 和 tomcat,即使只是为了调试正确的端口被暴露和监听 您解决了这个问题吗?您能分享一下您的解决方案吗? 【参考方案1】:使用主机网络应该可以解决这个问题:
tomcat:
network_mode: 'host'
无论出于何种原因,AJP 拒绝为我使用桥接网络。而且我的环境更简单:它是一个单独的容器,其中部署了嵌入式 Tomcat。我测试了与 AJP 客户端 (https://bz.apache.org/bugzilla/show_bug.cgi?id=47242) 的连接并将问题缩小到 Tomcat AJP 端。
【讨论】:
【参考方案2】:我也遇到了这个问题。我的 docker-compose 在共享桥接网络上有 Apache 和 Tomcat 容器。我没有使用 localhost,而是在 server.xml 中将 AJP 连接器地址设置为 0.0.0.0。重新启动 Tomcat 容器后,我能够从 8009 上的 Apache 容器连接到它。
【讨论】:
以上是关于apache httpd端口8009后面的Docker tomcat未连接的主要内容,如果未能解决你的问题,请参考以下文章