Solucionado (ver solução)
Solucionado
(ver solução)
9
respostas

Gunicorn está ouvindo em 0.0.0.0:6000, mas não consigo conectar

Olá! Estou tentando usar docker para subir uma aplicação em flask. O servidor é do gunicorn.

Essa é a minha dockerfile

FROM python:latest
RUN mkdir instance
COPY ./application /instance/application
WORKDIR /instance/application
RUN cd /instance/ && ls -a
RUN apt-get update && apt-get install python3-pip -y
ADD ./requirements.txt /instance/application/
RUN pwd && ls -a && cd .. && ls -a && cd application
RUN pip install -r requirements.txt
ENTRYPOINT chmod +x /instance/application/scripts/command.sh && pwd && /instance/application/scripts/command.sh && pwd
EXPOSE 6000

Esses são os meus shell scripts

app_base.sh

#!/bin/bash
sudo apt-get update
sudo apt-get install python3-pip -y
sudo pip3 --version
sudo pip3 install gunicorn flask sqlalchemy
sudo chmod +x command.sh

command.sh

#!/bin/bash
pwd
ls -a
mkdir ../database
python3 db_setup.py
python3 projetos_setup.py
python3 tutor_admin_setup.py
python3 tutoriais_setup.py
python3 user_admin_setup.py
gunicorn -b 0.0.0.0:6000 main:app

O command.sh prepara o banco de dados só para eu conseguir testar localmente.

Por enquanto estou subindo aplicação e base de dados tudo junto, mas depois vou tentar separar em contêineres diferentes.

O gunicorn diz que está listening in port 6000, mas não consigo acessar. Não há nenhum erro enquanto subo a aplicação.

Enfim, o que eu preciso configurar do gunicorn ou do contêiner para conseguir acessar minha aplicação localmente?

9 respostas

Olá João Pedro, tudo bem? Entendi, você está realizando todo esse processo em sua máquina local correto? Mas qual o erro quando você tenta acessar o enderenço http://localhost:6000? E também não entedi muito bem esse arquivo app_base.sh, ele é pra ser executado dentro do container é isso? Porque você faz a instalação do python tanto no build dockerfile quando nesse arquivo app_base.sh:

apt-get install python3-pip -y

Poderia explicar melhor pra gente poder entender e ti ajudar da melhor possível!

Oi, Jonilson! O browser não identifica nenhum server rodando no ip/porta que eu escrevo:

The webpage at http://localhost:6000/ might be temporarily down or it may have moved permanently to a new web address.

Com relação ao pip, eu devo ter esquecido de apagar. Estou mexendo em tanta coisa para tentar colocar isso de pé localmente que deixei esse código aí. Mas vou tirar, obrigado!

Modificações na Dockerfile

FROM python:latest
RUN mkdir instance
COPY ./application /instance/application
WORKDIR /instance/application
RUN cd /instance/ && ls -a
RUN apt-get update && apt-get install python3-pip -y
ADD ./requirements.txt /instance/application/
RUN pwd && ls -a && cd .. && ls -a && cd application
**RUN pip3 install -r requirements.txt**
ENTRYPOINT chmod +x /instance/application/scripts/command.sh && pwd && /instance/application/scripts/command.sh && pwd
EXPOSE 6000

Modificações no app_base.sh

#!/bin/bash
sudo apt-get update
sudo apt-get install python3-pip -y
sudo pip3 --version
#código removido a partir daqui

Mais um adendo. Esses são os comandos que uso pra buildar a imagem e ativar o contêiner:

docker build -t flaskapp .     
docker run -p 6000:6000 --name op flaskapp

Não tenho nenhuma network ativada

solução!

Ainda não entendi em que momento os comando do arquivo app_base.sh são executados, poderia explicar melhor como está fazendo esse processo? Também sei que a porta padrão do Gunicorn é a porta 8000, você já tentou usar essa porta? Outra coisa que pude perceber é que você não indicou o diretório usando algo como:

--chdir app

Você também pode ler um pouco sobre como fazer esse processo nesse rápido tutorial: Running Docker Container With Gunicorn and Flask.

Hmm, acho que eu acabei tirando mesmo o app_base do dockerfile. Eu posso tentar usar a porta padrão do Gunicorn, mas não sei se isso mudaria, alguma coisa, já que eu declaro o IP e a porta na hora que rodo o código.

Não entendi o que é o chdir. Isso é um comando do Gunicorn ou do dockerfile?

Também vou dar uma olhada nesse tutorial!

Dá uma olhada no tutorial, acho que pode ti ajudar e o comando chdir é sim do Gunicorn.

O código funcionou! Não sei se foi o chdir ou definir a porta padrão como 8000. Localmente consigo acessar a aplicação e na EC2 consigo conectar com o Nginx! Obrigado pela ajuda, Jonilson. Devo abrir um novo tópico se tiver mais dúvidas?

Sim João Pedro, é só abrir um novo tópico se ainda tiver alguma dúvida!