таймаут в восходящем направлении при чтении заголовка ответа от восходящего клиента 172.17.0.1 - PullRequest
0 голосов
/ 15 января 2020
upstream timeout while reading response header from upstream client 172.17.0.1... 

Получив эту ошибку при запуске образа docker, не уверен, почему эта ошибка возникает. Я попытался запустить тот же образ на другом компьютере, и он работает нормально.

Команда docker, которую я использовал для запуска этой программы:

docker run -e "PORT=8765" -p 8007:8765 akash9179/flask-vue  

Полная ошибка:

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/".

Файл Docker заканчивается:

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;'

1 Ответ

1 голос
/ 15 января 2020

Это, скорее всего, связано с тем, как вы вызываете серверы в 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 на самом деле не будет работать, пока * Процесс 1005 * успешно завершен, что, так как он работает на сервере, не будет.

Правильный способ создать это - иметь отдельный Dockerfile для сервера gunicorn и сервера nginx. Вы пытаетесь упаковать слишком много в один Dockerfile. Каждый контейнер должен запускать один процесс!

Затем вы должны определить их как отдельные службы в файле docker-compose.yml:

services:
  flask:
    build:
      context: .
      dockerfile: Dockerfile-flask
  nginx:
    build:
      context: .
      dockerfile: Dockerfile-nginx

В каждом контейнере имя службы ( это flask и nginx) может использоваться для доступа к другому контейнеру вместо имени хоста. Таким образом, в конфигурации nginx, где вы делаете строки proxy_pass, вы можете получить что-то вроде:

  location /ping {
    proxy_pass      http://flask:5000;
  }

Также, вероятно, нет смысла в этой строке sed, которая перезаписывает default.conf в измените номер порта nginx. Я хотел бы использовать в конфигурации порт stati c nginx, а затем, когда вы выполните команду run, просто документально подтвердите, что пользователь знает, что ему нужно сопоставить свой собственный предпочтительный внешний порт с портом вашего nginx. сервер.

Это также позволит избежать необходимости передавать PORT в качестве переменной среды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...