jumpserver装完不能访问的根本原因是网络层未打通,具体包括docker端口映射缺失、云服务器安全组未放行80端口、宿主机80端口被占用、数据库/redis配置使用127.0.0.1导致容器无法连接、docker_subnet与宿主机网段冲突等五类问题。

JumpServer 不是装完就能用的“开箱即用”软件,它依赖容器网络、服务绑定和反向代理三者协同。直接跑 ./jmsctl.sh install 成功 ≠ 能访问 Web 界面,绝大多数问题出在 Redis/MySQL 地址填错、Docker 子网冲突、或 Nginx 代理失效上。
为什么 jms_nginx 容器启动了但浏览器打不开 80 端口
本质是宿主机的 80 端口没真正映射到容器内 —— 常见于以下情况:
-
docker ps输出中jms_nginx的PORTS列没有0.0.0.0:80->80/tcp,说明docker-compose.yml里ports配置被删或注释了 - 云服务器(如阿里云、腾讯云)安全组没放行 80 端口,仅开放防火墙无效
- 宿主机已运行其他服务占用了 80 端口(如 Nginx、Apache),导致容器端口映射失败,
docker logs jms_nginx会报bind() to 0.0.0.0:80 failed - 安装时选了外部数据库,但
config.txt中DB_HOST=127.0.0.1—— 容器内无法访问宿主机的 loopback,必须填宿主机**内网 IP**(如192.168.10.50)
redis 和 mysql 必须绑定内网 IP,不能用 127.0.0.1
JumpServer 容器与宿主机上的 Redis/MySQL 是跨网络通信,127.0.0.1 在容器里指向自己,不是宿主机。
- MySQL:修改
/etc/my.cnf,确保bind-address = 192.168.10.50(你的内网 IP),并执行GRANT ALL ON jumpserver.* TO 'jumpserver'@'192.168.10.50' IDENTIFIED BY 'your_password'; - Redis:修改
/etc/redis.conf,将bind 127.0.0.1改为bind 192.168.10.50,并确认protected-mode no - 重启两个服务:
systemctl restart mysqld redis,再检查ss -tlnp | grep ':6379\|:3306'是否监听在对应 IP 上
DOCKER_SUBNET 冲突会导致 jms_core 启动失败且无明确报错
脚本默认设 DOCKER_SUBNET=192.168.250.0/24,若宿主机网段正好是 192.168.250.x,Docker 会静默失败,docker ps 看不到 jms_core,./jmsctl.sh status 显示它为 Exited。
- 查宿主机网段:
ip route | grep '^default' | awk '{print $3}' | xargs ipcalc -n(或直接看ip a) - 改子网:编辑
/opt/jumpserver/config/config.txt,把DOCKER_SUBNET=172.20.0.0/16(避开常见局域网段) - 执行
./jmsctl.sh down && ./jmsctl.sh install && ./jmsctl.sh start重装生效
大文件上传失败或超时,别只改 Nginx 配置
Web 界面上传资产密钥、审计录像等大文件失败,表面是 Nginx 报 413 Request Entity Too Large 或 504 Gateway Time-out,但实际要调三处:
-
/opt/jumpserver/config/nginx/conf.d/default.conf中增加:client_max_body_size 200m;proxy_read_timeout 300; -
/opt/jumpserver/config/config.txt中确认UPLOAD_SIZE_LIMIT=209715200(单位字节,即 200MB) - 重启生效:
./jmsctl.sh restart nginx(不要只reload,部分版本 reload 不加载新配置)
真正卡住人的,从来不是“怎么装”,而是“为什么装完了连不上”。网络拓扑、IP 绑定、子网划分这些底层细节一旦错位,日志里往往不报错,只表现为服务静默退出或代理断连。动手前先用 ip a 和 ss -tlnp 确认基础网络就位,比反复重装更省时间。











