猿问

docker 无法使用邮递员从 docker 公开正确的端口 9090

我的 server.py 有这段代码:


@app.route('/health', methods = ['POST'])

def check():

    if request.method == 'POST':

        return jsonify({'response':'OK!'})


if __name__ == '__main__':

    app.run(debug=True, port=9090)

我的 dockerfile 在此有 EXPOSE:


FROM py_ubuntu_flask_numpy_torch_jysan_voice

RUN mkdir -p ./voice_flask/d

WORKDIR /voice_flask/d

COPY . /voice_flask/d

EXPOSE 9090

CMD ["python", "server.py"]

我使用此 cmd 构建并运行我的图像:


docker build -t my_app .

docker run my_app

它启动并收听:


 * Serving Flask app "server" (lazy loading)

 * Running on http://127.0.0.1:9090/ 

但在邮递员中我什至无法检查健康功能:


"could not get response"

我怀疑 expose 9090 在 0.0.0.0 上有效?不在 127.0.0.1 上?如何修复它并测试我的应用程序?


斯蒂芬大帝
浏览 257回答 1
1回答

桃花长相依

EXPOSE本身不暴露任何端口。如果你像这样运行你的容器:docker run -P my_appDocker 会将容器内的端口 9090 绑定到主机上的随机端口。我怀疑你真正想要的是docker run -p 9090:9090 my_app这会将容器的 9090 端口绑定到主机上的 9090 端口。此外,您的应用正在侦听 127.0.0.1,这意味着它拒绝来自容器外部的连接。你需要的是if __name__ == '__main__':    app.run(debug=True, port=9090, host='0.0.0.0')
随时随地看视频慕课网APP

相关分类

Python
我要回答