Docker端口可通过curl访问但浏览器无法连接问题求助
问题解决步骤
1. 修改gunicorn监听地址
你的start_local_server.sh中gunicorn绑定的是127.0.0.1,这会导致服务仅能被容器内部(或使用--net=host时的宿主机回环地址)访问。将HOST改为0.0.0.0,让服务监听所有可用网卡:
set -x NUM_THREADS=1 HOST=0.0.0.0 # 修改此处 PORT=8080 TIMEOUT=1800 gunicorn -w ${NUM_THREADS} -t ${TIMEOUT} -b ${HOST}:${PORT} server:app
2. 调整Docker运行命令
根据你的操作系统选择对应命令:
- Linux系统:保留
--net=host(无需-p参数,host模式下直接共享宿主机网络):
docker run -v /home/manuel.dominguez/reference_files/:/Users/jocotton/Desktop/references_files/ --net=host -it spliceai
- Windows/macOS(Docker Desktop):移除
--net=host(该模式在Docker Desktop中不生效),保留端口映射:
docker run -v /home/manuel.dominguez/reference_files/:/Users/jocotton/Desktop/references_files/ -p 8080:8080 -it spliceai
3. 重新构建并验证
修改后重新构建镜像并启动容器:
docker build -t spliceai . # 执行对应系统的run命令
此时浏览器访问http://localhost:8080即可正常连接,同时原curl命令也能继续正常工作。
问题根源说明
- 当使用
--net=host且gunicorn绑定127.0.0.1时,宿主机终端的curl请求能直接访问宿主机回环地址(与容器共享网络),但浏览器若处于不同网络环境(比如WSL终端搭配Windows浏览器、Docker Desktop虚拟机网络限制),则无法访问仅绑定回环的服务。 - 改为绑定
0.0.0.0后,服务会监听所有网卡,确保不同环境下的请求都能被接收。
内容的提问来源于stack exchange,提问作者Manolo Dominguez Becerra
相关产品推荐
相关产品推荐

