Python 无法命中本地运行的docker容器
这是我的Dockerfile: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
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地址?容器的环回接口与主机不同。