【发布时间】:2021-10-26 01:45:58
【问题描述】:
我正在尝试在 Docker 容器中配置 Tomcat 以监听 127.0.0.1:80 而不是 0.0.0.0:80。 catalina 日志显示 Tomcat 服务器正在启动,但似乎无法访问 Tomcat。 catalina 日志和 netstat 都确认 Tomcat 正在监听 127.0.0.1:80。
Wireshark 显示 TCP 握手正在完成。但是浏览器发出的HTTP get请求没有得到响应。
这是 Dockerfile:
FROM debian:stretch
RUN \
apt-get update && \
apt-get upgrade -y && \
apt-get install -y default-jre && \
apt-get install -y libtcnative-1 && \
apt-get install -y wget && \
apt-get install -y curl && \
apt-get install -y unzip && \
apt-get install -y gettext-base
ENV JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64/jre"
RUN \
TOMCAT_VER=`curl --silent http://mirror.vorboss.net/apache/tomcat/tomcat-9/ | grep v9 -m 1 | awk '{split($5,c,">v") ; split(c[2],d,"/") ; print d[1]}'` && \
wget -N http://mirror.vorboss.net/apache/tomcat/tomcat-9/v${TOMCAT_VER}/bin/apache-tomcat-${TOMCAT_VER}.tar.gz &&\
tar xzf apache-tomcat-${TOMCAT_VER}.tar.gz && \
rm -f apache-tomcat-${TOMCAT_VER}.tar.gz && \
mv apache-tomcat-${TOMCAT_VER}/ /opt/tomcat
ENV CATALINA_HOME="/opt/tomcat" \
PATH="$PATH:/opt/tomcat/bin"
RUN rm -fr /opt/tomcat/webapps/*
COPY app.war /opt/tomcat/webapps/ROOT.war
COPY server.xml /opt/tomcat/conf/server.xml
CMD ["catalina.sh", "run"]
EXPOSE 80 443
这是来自 server.xml 的相关连接器:
<Connector port="80"
protocol="HTTP/1.1"
address="127.0.0.1"
connectionTimeout="20000" />
对此有更深入了解的人能否解释一下为什么在将 Tomcat 配置为侦听 127.0.0.1 时无法建立与 Tomcat 容器的连接?
【问题讨论】:
-
您将服务器暴露在 443 端口上。浏览器是否尝试使用 HTTPS?
-
如果您想从外部访问
127.0.0.1,为什么要绑定它? -
@chrylis-cautiouslyoptimistic- 浏览器尝试使用 HTTP,但是在端口 443 上使用 HTTPS 具有相同的结果
-
@LMC 我有其他进程使用端口 80,因此 Tomcat 在侦听 0.0.0.0:80 时无法启动,因为它会覆盖所有环回。这种方法行不通吗?
-
从网络角度看,只要其他进程没有在所有接口上绑定端口 80,它可以工作。从功能的角度来看,我相信它不会起作用。解决方案可能是将此进程绑定到端口 81 等。另一种方法是在端口 80 上使用反向代理来处理这两个进程。
标签: java linux docker tomcat networking