Dockerized Flask: Thiết lập lại kết nối bằng ngang hàng


9

Cố gắng kết nối với ứng dụng Flask được neo không thành công với lỗi 104, 'Thiết lập lại kết nối bằng ngang hàng' bằng ví dụ tối thiểu này:

ứng dụng:

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

Ứng dụng Flask dường như đang chạy như mong đợi:

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

Cố gắng kết nối từ bên ngoài không thành công:

$ 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/

Mọi ý tưởng, tại sao tôi không thể xem "Hello World!" đây?

Câu trả lời:


12

Cố gắng kết nối từ bên ngoài không thành công

Bạn đang thực sự kết nối từ bên ngoài ? Flask được liên kết với localhost (127.0.0.1) và điều đó sẽ chỉ có thể truy cập từ bên trong container. Nếu bạn đang sử dụng máy cục bộ của mình, bạn sẽ cần bình để liên kết với tất cả IP:

from flask import Flask
app = Flask(__name__)

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

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

Điều đó làm việc cho tôi thành công.


1
Đúng rồi. Không bao giờ nghĩ rằng đây thực sự là một vấn đề trăn hoặc bình, vì tôi chỉ sao chép nó từ các tài liệu . Thx
mc32

Hoặc với gunicorn:gunicorn --bind 0.0.0.0:5000 app:app
Martin Thoma

1
Nếu bạn đang sử dụng flask run, sử dụng --host=0.0.0.0. Hoặc trong Dockerfile:CMD ["flask", "run", "--host=0.0.0.0"]
sebas

Tôi đã tìm kiếm cái này trong 4 ngày> D lol
eleijonmarck
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.