root@48dcfa91006b:/opt/solr# ss -anpt State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 4096 127.0.0.11:46465 CVE-2021-44228里并没有开启8983端口,但有46465,无法通过主机地址,访问8983,来访问docker容器[root@localhost CVE-2021-44228]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 48dcfa91006b vulhub/solr:8.11.0 "bash /docker-entryp…" 34 minutes ago Up 28 minutes 0.0.0.0:8983->8983/tcp, [::]:8983->8983/tcp cve-2021-44228-solr-1 [root@localhost CVE-2021-44228]#
时间: 2025-07-08 10:32:45 浏览: 7
<think>好的,我现在需要解决用户的问题。用户在使用Docker运行Solr容器时遇到了无法通过主机地址访问容器内的8983端口的问题。让我仔细看看用户的描述和提供的命令输出。
首先,用户执行了`ss -anpt`命令,显示容器内部监听的端口是46465,而用户期望的是8983端口。但根据`docker ps`的输出,容器的端口映射是正确的,将主机的8983端口映射到了容器的8983端口。这说明问题可能不在Docker的端口映射上,而可能出在容器内部的配置或服务状态上。
接下来,我需要考虑可能的原因。首先,Solr服务是否在容器内正确启动?如果服务没有运行,即使端口映射正确,也无法访问。用户提到在容器内部执行`ss -anpt`没有看到8983端口监听,这表明Solr可能没有启动,或者监听了其他地址,比如仅绑定到localhost而不是所有接口。
另外,检查容器的日志可能会有帮助,查看是否有启动错误。用户可能需要进入容器内部,检查Solr的配置文件,确认监听的IP地址是否正确,是否绑定到了0.0.0.0而不是127.0.0.1。此外,防火墙或SELinux设置也可能导致主机无法访问容器的端口,需要检查主机的防火墙规则。
还需要考虑用户是否在主机上正确访问,比如使用`curl localhost:8983`或者主机的IP地址,而不是容器内部的IP。此外,虽然Docker映射了端口,但有时可能需要等待服务完全启动,特别是如果服务启动较慢的话。
总结一下,可能的解决步骤包括:检查容器内Solr服务的运行状态,查看日志确认启动情况,验证Solr的绑定地址,检查主机防火墙设置,以及确认访问方式是否正确。需要一步步引导用户排查这些可能性,找到具体原因。</think>---
### **问题分析**
根据你的描述和命令输出,核心问题在于 **Docker容器内的Solr服务未正确监听8983端口**,尽管Docker已配置端口映射 (`0.0.0.0:8983->8983/tcp`),但容器内部的服务未启动或未绑定到该端口。以下是详细排查步骤:
---
### **1. 确认容器内服务状态**
#### (1) 进入容器检查Solr进程
```bash
# 进入容器命令行
docker exec -it 48dcfa91006b bash
# 查看Solr是否运行
ps aux | grep solr
```
- **预期输出**:应存在 `java -jar start.jar` 或其他Solr相关进程。
- **若未运行**:需手动启动Solr服务(参考镜像文档)。
---
#### (2) 检查容器内端口监听
在容器内执行:
```bash
netstat -tuln | grep 8983
# 或使用 ss 替代 netstat
ss -ltnp | grep 8983
```
- **若输出为空**:说明Solr未监听8983端口,可能服务未启动或配置错误。
- **若显示 `127.0.0.1:8983`**:说明Solr仅绑定到本地回环地址,需修改为 `0.0.0.0`。
---
### **2. 检查Solr配置文件**
#### (1) 定位配置文件
Solr默认配置文件通常位于:
```bash
/opt/solr/server/etc/jetty.xml
```
或环境变量控制的配置文件(如 `SOLR_OPTS`)。
#### (2) 修改监听地址
查找 `jetty.host` 或 `host` 参数,确保设置为 `0.0.0.0`:
```xml
<Set name="host"><Property name="jetty.host" default="0.0.0.0"/></Set>
```
---
### **3. 重启Solr服务**
在容器内执行:
```bash
# 若通过 systemd 管理
systemctl restart solr
# 若直接通过脚本启动
/opt/solr/bin/solr restart -p 8983
```
---
### **4. 验证端口访问**
#### (1) 容器内本地访问测试
```bash
curl http://localhost:8983
```
- **若返回Solr管理页面**:说明服务已正常启动。
- **若连接拒绝**:检查Solr日志(通常位于 `/opt/solr/server/logs`)。
#### (2) 主机访问测试
```bash
curl http://localhost:8983
```
- **若失败**:检查主机防火墙:
```bash
# 开放8983端口(临时)
iptables -I INPUT -p tcp --dport 8983 -j ACCEPT
# 查看防火墙状态
systemctl status firewalld
```
---
### **5. 容器重建(终极方案)**
若配置修改无效,可尝试重建容器并显式指定监听地址:
```bash
docker run -d -p 8983:8983 -e SOLR_OPTS="-Djetty.host=0.0.0.0" vulhub/solr:8.11.0
```
---
### **关键结论**
| **现象** | **原因** | **解决方案** |
|-------------------------|--------------------------|----------------------------------|
| 主机无法访问8983端口 | Solr未绑定到 `0.0.0.0` | 修改 `jetty.host` 配置 |
| 容器内无8983端口监听 | Solr服务未启动 | 检查进程并手动启动 |
| 主机防火墙拦截 | 端口未开放 | 调整iptables或关闭防火墙 |
---
### **操作示例**
```bash
# 进入容器修改配置
docker exec -it 48dcfa91006b bash
sed -i 's/jetty.host=.*/jetty.host=0.0.0.0/' /opt/solr/bin/solr.in.sh
# 重启服务
/opt/solr/bin/solr restart -p 8983
# 退出容器后测试访问
curl http://localhost:8983
```
---
通过以上步骤,可系统性定位并解决端口不可达问题。建议优先检查容器内服务状态和绑定地址!
阅读全文
相关推荐

















