[英]Containerized flask app does not load if port is Changed
我创建了一个简单的flask应用程序,该应用程序在该应用程序的框架上运行,默认情况下,该应用程序在端口5000上运行:
# Create the application instance
app = connexion.App(__name__, specification_dir="./")
# read the swagger.yml file to configure the endpoints
app.add_api("swagger.yml")
# Create a URL route in our application for "/"
@app.route("/")
def home():
"""
This function just responds to the browser URL
localhost:5000/
:return: the rendered template "home.html"
"""
return render_template("home.html")
if __name__ == "__main__":
app.run(debug=True)
在Dockerfile中,我公开了相同的端口:
RUN python3 -m pip install -r requirements.txt
COPY . /app
EXPOSE 5000
然后我将容器运行为:
sudo docker run -d -p 5000:5000 my_app:latest
一旦容器装满,我就可以在以下位置访问应用程序:
http://localhost:5000
现在,我尝试更改为端口5100,为此,我正在更改:
a)在Dockerfile中:
COPY . /app
EXPOSE 5100
...
b)运行容器时:
sudo docker run -d -p 5100:5100 my_app:latest
但是当我尝试访问时: http:// localhost:5100 /
该应用未在此处运行
当我执行Docker ps时 ,显示如下:
编辑:
我尝试更改flask应用程序:
app.run(host='0.0.0.0', port=5100)
仍然无法正常工作,这是docker ps的屏幕截图:
不知道错误是否是因为开始时仍然显示5000:
5000/tcp, 0.0.0.0:5100->5100/tcp romantic_fermi
这就是我从码头工人日志中得到的...
* Serving Flask app "server" (lazy loading)
* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: on
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
从技术上讲,您可以更改分配给Flask
对象的默认端口,但是仅更改docker映射更为简单。
当您运行这样的命令时:
$ docker run -d -p 5100:5100 my_app:latest
您要说的是要将端口从容器内部(右侧)转发到主机(左侧)。
# Left side is your host machine
# Right side is inside of the container
5100:5100
因此,您可以将run
更新为映射到容器内部的5000
:
$ docker run -d -p 5100:5000 my_app:latest
然后,您将可以通过http:// localhost:5100访问
PS:如果您以前从未使用过docker-compose
,我强烈建议您在解决此问题后进行设置。 总的来说,它将使您的生活更轻松。
在您的.py脚本上,您需要使用以下命令设置5100端口:
app.run(debug=True,host='0.0.0.0', port=5100)
您所做的所有其他操作都是正确的!
如果您的python仍在侦听端口5000,则可能是旧版本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.