Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无法命中本地运行的docker容器_Python_Docker_Dockerfile - Fatal编程技术网

Python 无法命中本地运行的docker容器

Python 无法命中本地运行的docker容器,python,docker,dockerfile,Python,Docker,Dockerfile,这是我的Dockerfile: FROM alpine:3.5 RUN apk add --no-cache python3 && \ python3 -m ensurepip && \ rm -r /usr/lib/python*/ensurepip && \ pip3 install --upgrade pip setuptools && \ rm -r /root/.cache

这是我的Dockerfile:

FROM alpine:3.5


RUN apk add --no-cache python3 && \ 
    python3 -m ensurepip && \ 
    rm -r /usr/lib/python*/ensurepip && \ 
    pip3 install --upgrade pip setuptools && \ 
    rm -r /root/.cache 

# Copy files
COPY ./requirements.txt /app/requirements.txt
COPY ./main.py /app/main.py

# Install deps
RUN pip install --upgrade pip
RUN pip install --requirement /app/requirements.txt

# Set the default directory where CMD will execute
WORKDIR /app

EXPOSE 5000

CMD [ "python3", "-u", "./main.py" ]
和我的
main.py
文件: 来自我

port Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

if __name__ == "__main__":
    app.run()
在构建标记并通过docker run运行它之后,获取表示flask服务器已成功启动的日志:

$ docker run test:latest
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
但我无法在浏览器中点击服务器

我认为问题可能出在端口映射中,所以我像这样运行容器:

$ docker run -p 5000:5000 test:latest
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

还是没有骰子。我可以在容器外运行服务器,只需运行
python3main.py
。我做错了什么?

脚本正在侦听容器中的127.0.0.1,使主机无法访问它。它必须侦听0.0.0.0。

您看到的
127.0.0.1
地址是容器网络的本地主机,与主主机不同。公开端口时,docker将容器内部IP(172.17…)中的端口绑定映射到主机接口中的端口

因此,您必须让您的烧瓶监听其所有接口:

app.run(host='0.0.0.0')

127.0.0.1是环回地址(也称为本地主机)

0.0.0.0是一个不可路由的元地址,用于指定无效、未知或不适用的目标(“无特定地址”占位符)。对于网络连接的地址绑定之类的事情,结果可能是为连接分配适当的接口地址

在Docker中,容器的环回地址(127.0.0.1)与主机不相同。使用0.0.0.0作为主机

app.run(host='0.0.0.0')

我懂了。。。我认为
127.0.0.1
是环回ip。。。这难道不应该是可接近的吗?
0.0.0.0
是否有效地使用相同的ip地址?容器的环回接口与主机不同。