我有问题路由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"/>