前言:因为遇到了docker+etcd 无奈近程拜访?这个问题,所以我要深刻探索一下
当容器内的过程只监听 127.0.0.1 而不是 0.0.0.0 ,宿主机能够应用 127.0.0.1 拜访资源吗?能够
当容器内的过程只监听 127.0.0.1 而不是 0.0.0.0 ,宿主机能够应用 网关调配的ip 拜访资源吗?不能够
网关调配的ip 指的是 192.168.x.1 这种
上面做一个试验
FROM python:3.10.10-bullseye RUN echo "deb http://mirrors.aliyun.com/debian/ bullseye main non-free contrib" > /etc/apt/sources.listRUN apt-get updateRUN apt-get install -y vim netcat telnet less sysstat htop ncduRUN mkdir /codeWORKDIR /codeCOPY requirements-dev.txt /code/RUN pip install -r requirements-dev.txt -i https://mirror.baidu.com/pypi/simpleCOPY requirements-prd.txt /code/RUN pip install -r requirements-prd.txt -i https://mirror.baidu.com/pypi/simpleADD . /code/
requirements-dev.txt
mycliipythonautopep8psutilglancespylint
requirements-prd.txt
pymilvus==2.2.8numpy pydantic<2.0.0loguru requests pyyaml python-dotenv python-multipart # Form data requires "python-multipart" to be installed.cryptographypymysql peewee oss2 fastapi uvicorn psutildnspython==2.2.1
api.py
from fastapi import FastAPI, Form, Requestfrom loguru import loggerimport uvicornfrom fastapi import FastAPI, Form, Depends, Requestapp = FastAPI()async def get_form(request: Request): form_data = await request.form() return dict(form_data)@app.post('/search')def search_reverse( request: Request, form_data: dict = Depends(get_form), max_chunk_size: int = Form(1200, description='分批查问 milvus,每个查问批次的向量个数'), search_top_k: int = Form( default=30, description='搜寻 milvus 的时候,返回的最类似的 N 个后果'), distance_threshold: float = Form( 0.32, description='间隔下限(间隔应用 L2 欧氏间隔掂量,越靠近 0 越类似),但 milvus 的搜寻后果返回后,抛弃大于该值的向量搜寻后果')): form_dict = dict(form_data) logger.debug(form_dict)if __name__ == "__main__": uvicorn.run( app='api:app', host="127.0.0.1", port=9950, workers=1, reload=True )
打包镜像
docker build -t "ponponon/fastapi_example" .
运行镜像
docker run -p 9950:9950 --rm -it ponponon/fastapi_example python api.py
应用 nc 命令探测端口是否凋谢
─➤ nc -zv 192.168.2.15 9950 130 ↵nc: connect to 192.168.2.15 port 9950 (tcp) failed: Connection refused
─➤ nc -zv 127.0.0.1 9950 1 ↵Connection to 127.0.0.1 9950 port [tcp/*] succeeded!