"ajp_ilink_receive failed" 尝试通过 AJP 将非 Docker Apache 连接到 Docker Tomcat 时

"ajp_ilink_receive failed" when trying to connect a non-Docker Apache to a Docker Tomcat through AJP

我在通过 AJP 将 Apache(不是 docker 容器中的 运行)路由到 Docker 容器中的 Tomcat 运行ning 时遇到问题。 Apache 和 Tomcat 的配置在 运行 没有 Docker 的情况下工作,但是一旦我 运行 Tomcat 在 docker 它停止工作:那里是我在端口配置中缺少的东西是我的猜测。

除了以下配置外,我还尝试了 network_mode: docker-compose 中的主机。这允许我的请求通过,但我不能使用它,因为这也必须 运行 在非 linux 主机上。

请帮助我找出将非 Docker Apache 连接到 Docker-Tomcat.

时需要做哪些不同的事情

这是我的 error.log 来自 Apache

[Mon Mar 01 14:03:42.650251 2021] [proxy_ajp:error] [pid 4603:tid 140128592954944] [client 127.0.0.1:52788] AH00992: ajp_read_header: ajp_ilink_receive failed
[Mon Mar 01 14:03:42.650278 2021] [proxy_ajp:error] [pid 4603:tid 140128592954944] (120006)APR does not understand this error code: [client 127.0.0.1:52788] AH00878: read response failed from 127.0.0.1:8009 (staffan)

这是我的 apache 配置的 proxypass 部分

ProxyPass / ajp://staffan:8009/ timeout=600 secret=mySecret
ProxyPassReverse / ajp://staffan:8009/ secret=mySecret

这是tomcat中server.xml对应的部分

<Connector port="8009"
  protocol="AJP/1.3"
  redirectPort="8443"
  asyncTimeout="60000"
  maxPostSize="52428800"
  allowedRequestAttributesPattern=".*"
  secret="mySecret"/>

Docker 文件(使用 #docker build -t my-docker 构建。)

FROM tomcat:9
ENV JPDA_ADDRESS=*:5005
ENV JPDA_TRANSPORT=dt_socket
WORKDIR /
COPY ./deploy/server.xml /usr/local/tomcat/conf/
COPY ./deploy/context.xml /usr/local/tomcat/conf/
COPY ./deploy/web.xml /usr/local/tomcat/conf/
COPY ./build/libs/localhost.war /usr/local/tomcat/webapps/.
CMD ["catalina.sh", "jpda", "run"]

和docker组成

version: "3.8"

services:
  my-development:
    image: my-docker
    restart: unless-stopped
    mem_limit: 16gb
    ports:
      - 8009:8009
      - 9080:9080
      - 5005:5005
    volumes:
      - my-io:/io
      - logs:/logs

volumes:
  my-io:
    external: true
    name: my-io
  logs:
    name: logs

问题出在网络上;你必须告诉 Tomcat 使用地址属性

监听所有地址(因为 Apache 在容器之外)
 <Connector port="8009"
               protocol="AJP/1.3"
               asyncTimeout="60000"
               maxPostSize="52428800"
               allowedRequestAttributesPattern=".*"
               packetSize="32768"
               secret="mySecret"
               address="0.0.0.0"/>