Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.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 如果端口发生更改,则容器化烧瓶应用程序不会加载_Python_Docker_Flask - Fatal编程技术网

Python 如果端口发生更改,则容器化烧瓶应用程序不会加载

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

我创建了一个简单的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 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。根据他的评论,他的图片没有最新的代码。