Tidak Dapat Terhubung ke Aplikasi Flask Di Docker Dari Host [duplikat]

Saya telah menyiapkan gambar buruh pelabuhan ubuntu 14.04 dan saya menjalankannya dengan perintah berikut:

docker run -d -p 5000:5000 ari/python3-flask

File Docker:

FROM ubuntu:14.04
RUN apt-get update && apt-get install -y python3 python3-pip
ADD . /var/my_app
RUN pip3 install -r /var/my_app/requirements.txt
EXPOSE 5000
CMD ["python3", "/var/my_app/runserver.py"]

Namun, jika saya mencoba menggulung alamatnya (localhost:5000) atau mengunjunginya di browser, saya mendapatkan kesalahan koneksi gagal.

Log buruh pelabuhan untuk kontainer menunjukkan:

Running on http://127.0.0.1:5000/

Restarting with reloader

Adakah yang salah dengan pengaturan dan/atau konfigurasi buruh pelabuhan saya? Terima kasih.


person Ari    schedule 17.10.2014    source sumber
comment
posting Dockerfile Anda, apakah Anda menggunakan buruh pelabuhan asli atau boot2docker (win atau macos) dalam kasus Anda?   -  person Dragu    schedule 17.10.2014
comment
apa yang ditunjukkan docker logs <id container>?   -  person Thomasleveil    schedule 17.10.2014
comment
@Dragu: Saya menggunakan buruh pelabuhan asli.   -  person Ari    schedule 17.10.2014
comment
BTW, jika Anda ingin menerapkan aplikasi Anda di Docker tanpa harus mempelajari, menginstal, dan mengonfigurasi uWSGI, Nginx, dan Supervisord (untuk mendapatkan performa dan ketahanan terbaik), Anda mungkin ingin memeriksa gambar ini: hub.docker.com/r/tiangolo/uwsgi-nginx-flask   -  person tiangolo    schedule 20.02.2016


Jawaban (1)


Server web yang berjalan di kontainer Anda mendengarkan koneksi pada port 5000 antarmuka jaringan loopback (127.0.0.1). Oleh karena itu, server web ini hanya akan merespons permintaan http yang berasal dari penampung itu sendiri.

Agar server web dapat menerima koneksi yang berasal dari luar penampung, Anda harus mengikatnya ke alamat IP 0.0.0.0.

Saat Anda menggunakan Flask, hal ini dapat dilakukan dengan mudah di file runserver.py dengan menggunakan:

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

Kemudian ketika Anda memulai penampung dan melihat log, Anda akan melihat sesuatu seperti:

 * Running on http://0.0.0.0:5000/
person Thomasleveil    schedule 17.10.2014
comment
Pengamatan yang bagus. Terima kasih - person Atish Narlawar; 05.11.2014
comment
Bahkan setelah menambahkan `host='0.0.0.0' saya masih mendapatkan kesalahan koneksi gagal. File buruh pelabuhan saya dikonfigurasi sama dengan @Ari juga. - person Alex F; 06.11.2019
comment
apakah ini terselesaikan? - person v09; 30.07.2020