You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker容器网络异常:Tomcat容器无法解析H2容器主机名

问题描述

我运行着两个Docker容器,分别部署Tomcat和H2数据库。使用docker compose build结合以下compose.yml构建容器:

services:
  tomcat:
    build: tomcat
    ports:
      - "8080:8080"
    networks:
      - my-network

  h2:
    build: h2
    ports:
      - "8082:8082"
      - "9092:9092"
    networks:
      - my-network

networks:
  my-network:
    driver: bridge

Tomcat容器的Dockerfile如下:

FROM tomcat:10.1.28-jre21
COPY my-app.war /usr/local/tomcat/webapps/my-app.war
COPY h2-2.3.232.jar /usr/local/tomcat/lib/h2.jar
CMD ["catalina.sh", "run"]

H2容器的Dockerfile如下:

FROM openjdk:21
COPY h2-2.3.232.jar /usr/local/h2.jar
COPY startup.sh /usr/bin/startup.sh
WORKDIR /
ENTRYPOINT ["/usr/bin/startup.sh"]

H2数据库通过startup.sh启动,脚本内容:

#!/bin/bash

cd /usr/local
java -cp h2.jar org.h2.tools.Server -tcpAllowOthers -webAllowOthers

执行docker network inspect docker_my-network显示两个容器均已连接至该网络,且Tomcat和H2数据库在浏览器中均可正常访问。在H2容器内执行curl http://tomcat:8080可正常访问,但在Tomcat容器内执行curl http://h2:8082却返回“Host h2 not found”,请问遗漏了什么配置?


问题排查与解决
  • 确认Tomcat容器的网络归属
    执行docker inspect <tomcat容器ID或名称>,查看Networks字段是否包含my-network。如果未包含,说明容器未正确加入网络,需在compose.yml所在目录重新执行docker compose up -d,确保容器启动时关联指定网络。

  • 测试Tomcat容器内的DNS解析
    进入Tomcat容器后,执行nslookup h2或dig h2:

    • 若解析失败,检查容器内的/etc/resolv.conf,正常情况下应包含Docker内置DNS服务器(通常为127.0.0.11)。若DNS配置异常,可尝试重启Tomcat容器,或在compose.yml的tomcat服务中添加DNS配置:
      tomcat:
        # 原有配置
        dns:
          - 127.0.0.11
          - 8.8.8.8
      
  • 验证H2容器的运行状态
    执行docker logs <h2容器ID或名称>,确认H2服务已正常启动(日志中应包含TCP server running at tcp://0.0.0.0:9092和Web server running at http://0.0.0.0:8082类信息)。若H2未正常启动,需在H2的Dockerfile中添加RUN chmod +x /usr/bin/startup.sh,确保启动脚本拥有执行权限。

  • 直接用IP测试连通性
    通过docker inspect <h2容器ID>获取H2容器的IP地址,在Tomcat容器内执行curl http://<h2-ip>:8082:

    • 若能访问,说明问题出在DNS解析,需重点排查Tomcat容器的DNS配置;
    • 若仍无法访问,需检查是否有自定义网络策略或容器内防火墙规则限制了连通(默认容器无防火墙,若有自定义配置需调整)。

内容的提问来源于stack exchange,提问作者vencint

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 13:26:13