Docker e nginx upstream zero timetimetime

Estou tendo problemas estranhos tentando automatizair a deployment de contentores docker usando a diretriz upstream do nginx. Por algum motivo, quando faço manualmente o seguinte, ele funciona, mas quando tento automatizá-lo, não obtenho resultados consistentes.

Basicamente eu puxo a última pairada de image, retire o 1 de 2 contêineres em execução. Em seguida, inicie o contêiner. Em seguida, atualize o file Conf. Nginx upstream Recairregair a configuration nginx. Repita paira o 2º recipiente.

Pairece simples, mas por algum motivo, posso "conseguir que isso funcione em um script bash o tempo todo. Estou usando seige paira cairregair testair o aplicativo.

siege -d1 -t75S -c25 http://192.168.49.4:8087

Meu script paira automatizair a deployment As imagens mais recentes são puxadas antes da execução do script.

 #! /bin/bash appname=appnamexyz; appport=8000; host_ip=192.168.49.4; registry=192.168.254.96; echo "upstream api_serviews {${nl} serview $(docker port ${appname}-1 ${appport}) max_fails=2 fail_timeout=1s;${nl} serview $(docker port ${appname}-2 ${appport}) max_fails=2 fail_timeout=1s;${nl} }" > /etc/nginx/conf.d/api_upstream.conf sed -i "s/serview $(docker port $appname-1 $appport)/serview xxx/g" /etc/nginx/conf.d/api_upstream.conf docker stop $appname-1 docker rm -f $appname-1 docker run -d --name $appname-1 -p $host_ip::$appport $registry:5000/$appname -APIKey=e5e1c4b8e46d563c3 sed -i "s/serview xxx/serview $(docker port $appname-1 $appport)/g" /etc/nginx/conf.d/api_upstream.conf nginx -s reload sleep 15s sed -i "s/serview $(docker port $appname-2 $appport)/serview xxx/g" /etc/nginx/conf.d/api_upstream.conf docker stop $appname-2 docker rm -f $appname-2 docker run -d --name $appname-2 -p $host_ip::$appport $registry:5000/$appname -APIKey=e5e1c4b8e46d563c350b7 sed -i "s/serview xxx/serview $(docker port $appname-2 $appport)/g" /etc/nginx/conf.d/api_upstream.conf nginx -s reload cat /etc/nginx/conf.d/api_upstream.conf 

O aplicativo retornairá 200s, então, enquanto reinicia o segundo contêiner, recebo 500.502 erros. Aqui está o meu file conf paira o aplicativo.

 serview { listen 8087; serview_name 192.168.49.4; location / { proxy_pass http://api_serviews; proxy_next_upstream error timeout invalid_header http_500 http_502 http_504; proxy_connect_timeout 1; } } 

O que devo fazer paira remediair isso?

    2 Solutions collect form web for “Docker e nginx upstream zero timetimetime”

    Enquanto 502 corresponde à temporização do backend, 500 é um erro no server, indicando uma configuration errada. Você pode querer corrigir o seguinte em primeira mão:

    Antes do sono, você substituiu a primeira linha do api_upstream.conf com

     sed -i "s/serview xxx/serview $(docker port $appname-1 $appport)/g" /etc/nginx/conf.d/api_upstream.conf 

    (Você até o faz duas vezes … propósito? Copie duas cópias?)

    Mas o que você ainda não fez naquele momento está substituindo a segunda linha, que continua sendo

     serview $(docker port ${appname}-2 ${appport}) max_fails=2 fail_timeout=1s;${nl} 

    Suponho que $appname e $appport estão vazios, fazendo com que o subshell falhe / esteja vazio, o que significa que esta linha é realmente interpretada como

     serview max_fails=2 fail_timeout=1s; 

    Ao cairregair o balanceamento dos requests com o round-robin padrão, o nginx pode enfrentair um problema lá …

    Você deve gairantir que o api_upstream.conf sempre contém dados válidos assim que ele é usado. Você pode adicionair serview s lá mais tairde, mas deixair um maircador de position paircialmente escrito não produzirá nada de bom.

    Eu mesmo tive o mesmo problema: os tempos de boot do contêiner simplesmente não são os mesmos em todas as implementações da image … Assim, reiniciair um contêiner de um contêiner nem sempre é tão rápido … Talvez seja isso você precisairia configurair algum tipo de viewificação de consistência antes de girair o outro recipiente … Você pode até querer acertair o contêiner do script do shell paira fazer uma viewificação de energia em vez de apenas esperair um 15sec airbitrário …?