Docker容器中指定端口无法在浏览器访问Adminer的问题排查
问题描述
我通过以下命令创建Adminer Docker容器:
sudo docker run -it -d --name admine -p 7000:7000 --network techBankNet -e ADMINER_DEFAULT_SERVER=mysql_container --restart always adminer:latest
执行sudo docker ps后显示容器正常运行:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d170a4d96c10 adminer:latest "entrypoint.sh php -…" 8 hours ago Up 47 minutes 0.0.0.0:7000->7000/tcp, :::7000->7000/tcp, 8080/tcp admine 6f980494ad04 mysql:latest "docker-entrypoint.s…" 9 hours ago Up 47 minutes 3306/tcp, 33060/tcp, 0.0.0.0:3307->3307/tcp, :::3307->3307/tcp mysql-container
同时MySQL容器可通过sudo docker exec -it mysql-container mysql -p正常访问:
Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 8 Server version: 8.0.33 MySQL Community Server - GPL Copyright (c) 2000, 2023, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
我已将容器7000端口映射到主机7000端口,但访问localhost:7000时浏览器显示“页面加载失败”,执行curl -i my_ip_address:7000返回错误:
curl: (7) Failed to connect to my_ip_address port 7000 after 3069 ms: No route to host
请问该问题的可能原因是什么?
可能的原因及排查方案
Adminer容器端口映射不匹配
Adminer官方镜像默认监听8080端口,而你启动命令中把主机7000端口映射到了容器的7000端口——容器内部7000端口并没有服务运行。从docker ps输出也能看到,容器本身暴露了8080/tcp端口,这才是正确的内部端口。
解决:修改启动命令的端口映射为-p 7000:8080,重启容器后再访问localhost:7000。主机防火墙或安全组拦截端口
No route to host错误通常和网络拦截有关,主机的防火墙(如ufw、firewalld)或云服务器安全组可能未开放7000端口的入站流量。
排查:- Linux主机用
ufw的话,执行sudo ufw allow 7000/tcp;用firewalld则执行sudo firewall-cmd --add-port=7000/tcp --permanent && sudo firewall-cmd --reload; - 云服务器需检查安全组规则,确保入方向允许7000端口的TCP连接。
- Linux主机用
自定义网络配置异常
容器加入的techBankNet网络可能存在配置问题,导致容器与主机的通信受阻。
排查:- 临时移除
--network techBankNet参数,用默认bridge网络重启Adminer容器,测试是否能正常访问; - 执行
docker network inspect techBankNet查看网络的子网、网关配置,确认容器已正确加入该网络。
- 临时移除
Docker网络服务异常
Docker的网络组件(如docker0网桥)可能出现故障,导致端口映射的流量无法正常转发。
排查:- 重启Docker服务:
sudo systemctl restart docker,然后重新启动所有相关容器; - 执行
ip addr检查主机IP地址是否正确,确保my_ip_address是主机的有效公网或内网IP。
- 重启Docker服务:
内容的提问来源于stack exchange,提问作者belmont
相关产品推荐
相关产品推荐

