「解析」docker容器起服务,外部访问失败

将服务打包docker镜像时发现postman请求失败,以下是服务测试代码

python 复制代码
# @Author :  绿色羽毛
# @Email  :  lvseyumao@foxmail.com
# @Blog   :  https://blog.csdn.net/ViatorSun
# @Note   :


import os
import cv2
import uvicorn
from fastapi import FastAPI, Request, HTTPException
from fastapi.responses import JSONResponse, StreamingResponse


app = FastAPI()
@app.post("/video")
async def server(request: Request):
    try:
        data = await request.json()
        rtsp_url = data["rtsp_url"]
        print(f"==== {rtsp_url}")

    except json.JSONDecodeError:
        raise HTTPException(status_code=400, detail="Invalid JSON format")


if __name__ == '__main__':
    uvicorn.run(app, host="0.0.0.0", port=8080)

端口为8080,在起docker镜像时,需要将容器端口跟宿主机端口映射成功,可以通过 docker ps 命令查看,可以看到 PORTS已经将8080端口映射成功

但是使用 postman 进行请求测试的时候,会发现使用 http://localhost:8080/video 进行请求时会导致失败

原因分析,及解决方案

使用 docker inspect 查看容器详细信息

shell 复制代码
# docker inspect <container_id_or_name>		# 命令
docker inspect 54c2afaaf8e4

主要的问题发生在,在 Docker 容器中运行应用时,127.0.0.1 是容器内部的本地地址。使用 127.0.0.1:8080,则只会使服务对 容器内 的请求可用,而容器外的请求(例如从主机或 Postman 进行的请求)会被拒绝连接。

解决方法:

  1. 首先修改 uvicorn.run 中的 host 参数,将其改为 0.0.0.0,这样服务就会绑定到所有网络接口(即允许来自外部的连接)
  2. 然后通过 docker inspect <container_id_or_name> 查看容器的详细配置和端口映射
    • "Gateway": "172.17.0.1":这个字段表示容器所在网络的默认网关地址。在 Docker 默认的网络驱动(bridge模式)下,容器和宿主机的通信通常通过这个网关进行。该网关地址通常是 Docker 默认桥接网络(bridge)的地址。
    • "GlobalIPv6Address": "" :这个字段表示容器的全局 IPv6 地址。由于该字段为空,表示容器没有配置全局 IPv6 地址。在默认情况下,Docker 不会为容器启用 IPv6,除非显式配置。
    • "GlobalIPv6PrefixLen": 0:这个字段表示容器的全局 IPv6 地址的前缀长度,通常用于定义子网的大小。因为没有配置 IPv6 地址,这个值是 0。
    • "IPAddress": "172.17.0.2":这个字段表示容器在当前网络(默认情况下是 Docker 的桥接网络 bridge)中的 IP 地址。在这种情况下,容器的 IP 地址是 172.17.0.2,这是容器在桥接网络中的内网地址。

在此,主要查看 IPAddress 属性,IPAddress 表示容器在当前网络中的 ip地址,即容器在桥接网络中的内网地址

最后再使用 postman 进行 http://172.17.0.2:8080/video 测试发现可以正常请求

相关推荐
Python自动化直播8 分钟前
自动化笔记:素材管理、命名、轮换的几条土办法
linux·运维·数据库
FlightYe30 分钟前
音视频修炼之容器与协议(一):MP4和MOV的box剖析
android·linux·c++·ffmpeg·音视频
川石课堂软件测试1 小时前
涨薪技术|0到1学会性能测试第8课-Analysis分析图
服务器·数据库·python·sql·jmeter·mysql·容器
暴雨课堂1 小时前
tp5 tp6被攻击篡改后恢复
linux·服务器·php
7177771 小时前
国内 Docker 镜像仓库推荐:Gitee 与主流方案对比及选型指南
docker·容器·gitee
江湖有缘1 小时前
Docker实战 | Docker部署Minimalist-web-notepad个人笔记本
前端·docker·notepad++
djjjx.1 小时前
Linux进程篇(四):内核托底与生死交错 ,深度硬核剖析“僵尸”与“孤儿”进程
linux·运维·服务器
为思念酝酿的痛1 小时前
Reactor反应堆模式
linux·服务器·网络
沫璃染墨1 小时前
从零入门计算机网络系列(六):TCP套接字编程实战——从listen监听到客户端与服务器通信
linux·服务器·c++·tcp/ip·计算机网络·tcp
2401_872418781 小时前
把 Ubuntu 服务器变成 AI Agent 终端:用自然语言或语音管理 Linux,任何命令都先审批(附完整 Python 源码)
linux·服务器·ubuntu·agent