You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Docker Compose部署多GlassFish无法访问问题求助

解决Docker Compose多GlassFish服务无法访问的问题

我之前碰到过一模一样的情况,大概率是端口映射冲突或者GlassFish绑定地址限制导致的,咱们一步步排查解决:

1. 先检查端口映射是否重复

你配置两个GlassFish服务时,是不是不小心把它们都映射到了主机的同一个端口?比如这种错误写法:

version: "3"
services:
  glassfish1:
    image: glassfish:latest
    ports:
      - "8080:8080"
  glassfish2:
    image: glassfish:latest
    ports:
      - "8080:8080"

这种情况下,第二个服务其实没法正常绑定主机的8080端口(虽然Docker Compose可能不会直接报错,但实际端口已经被第一个服务占用了)。解决办法很简单,给每个服务分配不同的主机端口:

version: "3"
services:
  glassfish1:
    image: glassfish:latest
    ports:
      - "8080:8080" # 主机8080对应容器内8080
  glassfish2:
    image: glassfish:latest
    ports:
      - "8081:8080" # 主机8081对应容器内8080

之后访问http://localhost:8080http://localhost:8081就能分别打开两个GlassFish服务了。

2. 确认GlassFish绑定的是0.0.0.0

有些GlassFish镜像默认只绑定了容器内的localhost(也就是127.0.0.1),这样即使端口映射正确,外部也没法访问。你可以在Compose里通过启动命令强制让它监听所有地址:

services:
  glassfish1:
    image: glassfish:latest
    ports:
      - "8080:8080"
    command: ["asadmin", "start-domain", "--verbose", "--domaindir", "/opt/glassfish5/glassfish/domains", "--address", "0.0.0.0"]
  glassfish2:
    image: glassfish:latest
    ports:
      - "8081:8080"
    command: ["asadmin", "start-domain", "--verbose", "--domaindir", "/opt/glassfish5/glassfish/domains", "--address", "0.0.0.0"]

这个命令会让GlassFish监听容器的所有网络接口,确保外部能通过端口映射正常访问。

3. 验证容器内服务是否真的正常运行

如果上面两步都试过还是不行,可以进入容器内部测试服务状态:

# 先查看运行中的容器ID
docker ps
# 进入其中一个GlassFish容器
docker exec -it <你的容器ID> bash
# 在容器内curl本地8080端口,检查服务是否启动
curl http://localhost:8080

如果容器内都没法访问,说明GlassFish本身启动有问题,可能需要更换镜像或者检查初始化配置。

4. 排查防火墙和本地端口占用

有时候主机的防火墙会拦截新端口的访问,或者其他程序占用了你指定的端口。你可以用以下命令检查:

# Linux/macOS 检查端口占用
lsof -i :8081
# Windows 检查端口占用
netstat -ano | findstr :8081

如果端口被占用,换一个未被使用的端口就能解决。


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

火山引擎 最新活动