前言:因为遇到了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!