Balão encaixado: Conexão redefinida por ponto


9

A tentativa de conectar-se a um aplicativo Flask encaixado falha com o erro 104, 'Conexão redefinida pelo par' usando este exemplo mínimo:

app.py:

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

if __name__ == "__main__":
    app.run()

Dockerfile:

FROM python:alpine
RUN pip install flask
COPY . /src/
EXPOSE 5000
ENTRYPOINT ["python", "/src/app.py"]

docker-compose.yml:


test:
    build: .
    ports:
        - 127.0.0.1:5000:5000

O aplicativo Flask parece estar executando como esperado:

$ docker logs test 
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

A tentativa de conectar-se de fora falha:

$ http http://127.0.0.1:5000/
http: error: ConnectionError: ('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer')) while doing GET request to URL: http://127.0.0.1:5000/

Alguma idéia, por que não consigo ver "Olá, mundo!" aqui?

Respostas:


12

Tentativa de conexão externa falha

Você está realmente se conectando de fora ? O balão está vinculado ao host local (127.0.0.1) e isso só pode ser alcançado de dentro do contêiner. Se você estiver em sua máquina local, precisará do balão para vincular a todos os IPs:

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello():
    return "Hello World!"

if __name__ == "__main__":
    app.run(host='0.0.0.0')

Isso funciona para mim com sucesso.


11
Está certo. Nunca pensei que isso fosse realmente um problema de python ou balão, pois acabei de copiá-lo dos documentos . Thx
mcnesium

Ou com gunicorn:gunicorn --bind 0.0.0.0:5000 app:app
Martin Thoma

11
Se você estiver usando flask run, use --host=0.0.0.0. Ou no Dockerfile:CMD ["flask", "run", "--host=0.0.0.0"]
sebas

Eu estive procurando isso por 4 dias> D lol
eleijonmarck 19/11/19
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.