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



我有问题路由Apache(不在docker容器中运行)通过AJP到运行在docker容器中的Tomcat。Apache和Tomcat的配置可以在没有Docker的情况下运行,但是一旦我在Docker中运行Tomcat,它就会停止工作:我猜端口配置中缺少了一些东西。

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

请帮助我找到连接非docker Apache到Docker-Tomcat时需要做的不同。

This is my error.log from 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"/>

相关内容

最新更新