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未连接的主要内容,如果未能解决你的问题,请参考以下文章

apache tomcat 8009 端口正在使用中

nginx 80端口反向代理多个域名,怎样隐藏端口的

配置Apache

linux怎么查看访问80端口的日志,在无法查看Apache日志的情况下

一些安全防护办法

apache的80端口分发