Python 如果端口发生更改,则容器化烧瓶应用程序不会加载
我创建了一个简单的flask应用程序,它运行在一个平台上,这是flask应用程序的框架,默认情况下在端口5000处运行:Python 如果端口发生更改,则容器化烧瓶应用程序不会加载,python,docker,flask,Python,Docker,Flask,我创建了一个简单的flask应用程序,它运行在一个平台上,这是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
# 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
但当我尝试访问时:
应用程序没有在那里运行
当我执行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
这是我从docker日志中得到的
* 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)
在.py脚本上,您需要使用以下设置5100端口:
app.run(debug=True,host='0.0.0.0', port=5100)
你所做的一切都是正确的
如果python仍在监听端口5000,可能是旧版本。您可以从技术上更改分配给
Flask
对象的默认端口,但只更改docker映射更简单
当您运行这样的命令时:
$docker run-d-p 5100:5100我的应用程序:最新版本
您的意思是希望将一个端口从容器内部(右侧)转发到主机(左侧)
因此,您可以更新您的run
以映射到容器内部的5000
:
sudo docker run -d -p 5100:5100 my_app:latest
$docker run-d-p 5100:5000我的应用程序:最新版本
然后你就可以通过
PS:如果您以前没有使用过
docker compose
,我强烈建议您在解决此问题后设置它。一般来说,这会让你的生活更轻松。这是因为你需要更改app.run(debug=True,host=0.0.0.0',port=5001)
,否则,它默认为127.0.0.1:5000
,这在外部无法进一步访问,如果在docker运行中显式公开端口,则dockerfile中的EXPOSE
是不必要的command@C.Nivs谢谢,我会试试的。你的意思是端口=5100,对吗?啊,对,是的,错过了两次!很难说。。您的最新版本是否未标记为您构建的最新版本?或者构建失败了,它没有引起您的注意,问题是,python应用程序仍在侦听5000,这很好。让应用程序在5000处侦听,并将docker命令更新为指向端口5000而不是5100。如果一切正常,他可能想知道为什么他的代码不起作用。他的代码很好,并按预期工作。他的docker命令不正确,需要更新。无需更改代码。在app.run(host='0.0.0',port=5100)
之后,应用程序仍在侦听5000。根据他的评论,他的图片没有最新的代码。