Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.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 从上游客户端读取响应头时上游超时172.17.0.1_Python_Docker_Flask - Fatal编程技术网

Python 从上游客户端读取响应头时上游超时172.17.0.1

Python 从上游客户端读取响应头时上游超时172.17.0.1,python,docker,flask,Python,Docker,Flask,运行docker映像时出现此错误不确定出现此错误的原因。我试着在不同的计算机上运行相同的图像,效果很好 我用于运行此程序的docker命令: upstream timeout while reading response header from upstream client 172.17.0.1... 完整错误: docker run -e "PORT=8765" -p 8007:8765 akash9179/flask-vue Dockerfile以以下内容结束: 10#10: *

运行docker映像时出现此错误不确定出现此错误的原因。我试着在不同的计算机上运行相同的图像,效果很好

我用于运行此程序的docker命令:

upstream timeout while reading response header from upstream client 172.17.0.1... 
完整错误:

docker run -e "PORT=8765" -p 8007:8765 akash9179/flask-vue  
Dockerfile以以下内容结束:

10#10: *2 upstream timed out (110: operation timed out) while reading response header from upstream, client:172.17.0.1, server: request: "GET /users HTTP/1.1", upstream: "http://127.0.0.1:5000/users", host: "localhost:8007", referrer: "http://localhost:8007/".

这很可能是由于您在Dockerfile中调用服务器的方式:

CMD gunicorn -b 0.0.0.0:5000 app:app --daemon && \
      sed -i -e 's/$PORT/'"$PORT"'/g' /etc/nginx/conf.d/default.conf && \
      nginx -g 'daemon off;'
我怀疑有了这个CMD行,nginx实际上在gunicorn进程成功完成之前不会运行,因为它运行的是服务器,所以它不会运行

构建这一架构的正确方法是为gunicorn服务器和nginx服务器提供一个单独的Dockerfile。您试图在单个Dockerfile中装入太多内容。每个容器应该运行一个进程

然后,应在docker-compose.yml文件中将这些服务定义为单独的服务:

在每个容器中,可以使用flask和nginx服务名称来访问另一个容器,而不是主机名。因此,在nginx配置中,您可以在其中执行代理传递行,您可以有如下内容:

services:
  flask:
    build:
      context: .
      dockerfile: Dockerfile-flask
  nginx:
    build:
      context: .
      dockerfile: Dockerfile-nginx
另外,在sed行中可能没有必要覆盖default.conf来更改nginx端口号。我会坚持在配置中使用一个静态的nginx端口,然后当您执行run命令时,只需将它记录下来,用户就知道他们需要将自己首选的外部端口映射到nginx服务器的端口


这还可以避免将端口作为环境变量传入。

此问题缺少一些内容:1任何代码/错误都应包含在问题正文中,而不是作为附加图像。2请包括用于启动此操作的docker run命令。3可能添加Dockerfile,以便我们知道您试图运行的内容。另请参见:。如果你想得到好的答案,你应该编辑你的问题:-我已经编辑了这个问题,包括我使用的docker run命令和完整的错误。谢谢!您是否也可以添加Dockerfile,或者添加到repo的链接。我在dockerhub上找不到akash9179/flask vue,所以我猜它来自一个私有注册表。存储库是公共的。这里是链接:您也可以在github上查看:
services:
  flask:
    build:
      context: .
      dockerfile: Dockerfile-flask
  nginx:
    build:
      context: .
      dockerfile: Dockerfile-nginx
  location /ping {
    proxy_pass      http://flask:5000;
  }