ไม่สามารถเชื่อมต่อกับแอป Flask บน Docker จากโฮสต์ [ซ้ำกัน]

ฉันได้ตั้งค่าอิมเมจ docker ubuntu 14.04 แล้วและใช้งานด้วยคำสั่งต่อไปนี้:

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

ด็อคเกอร์ไฟล์:

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"]

อย่างไรก็ตาม หากฉันพยายามม้วนที่อยู่ (localhost:5000) หรือไปที่เบราว์เซอร์ ฉันได้รับข้อผิดพลาดในการเชื่อมต่อล้มเหลว

บันทึกนักเทียบท่าสำหรับคอนเทนเนอร์แสดง:

Running on http://127.0.0.1:5000/

Restarting with reloader

มีใครบ้างที่เป็นหรืออาจผิดกับการตั้งค่านักเทียบท่าและ/หรือการกำหนดค่าของฉันหรือไม่ ขอบคุณ.


person Ari    schedule 17.10.2014    source แหล่งที่มา
comment
โพสต์ Dockerfile ของคุณ คุณใช้นักเทียบท่าจริงหรือ boot2docker (win หรือ macos) ในกรณีของคุณหรือไม่   -  person Dragu    schedule 17.10.2014
comment
docker logs <id container> แสดงอะไร?   -  person Thomasleveil    schedule 17.10.2014
comment
@Dragu: ฉันใช้นักเทียบท่าจริง   -  person Ari    schedule 17.10.2014
comment
BTW หากคุณต้องการปรับใช้แอปของคุณใน Docker โดยไม่ต้องเรียนรู้ ติดตั้งและกำหนดค่า uWSGI, Nginx และ Supervisord (เพื่อให้ได้ประสิทธิภาพและความทนทานที่ดีที่สุด) คุณอาจต้องการตรวจสอบรูปภาพนี้: hub.docker.com/r/tiangolo/uwsgi-nginx-flask   -  person tiangolo    schedule 20.02.2016


คำตอบ (1)


เว็บเซิร์ฟเวอร์ที่ทำงานอยู่ในคอนเทนเนอร์ของคุณกำลังรอรับการเชื่อมต่อบนพอร์ต 5000 ของอินเทอร์เฟซเครือข่ายแบบย้อนกลับ (127.0.0.1) ด้วยเหตุนี้เว็บเซิร์ฟเวอร์นี้จะตอบสนองต่อคำขอ http ที่มาจากคอนเทนเนอร์นั้นเท่านั้น

เพื่อให้เว็บเซิร์ฟเวอร์ยอมรับการเชื่อมต่อที่มาจากภายนอกคอนเทนเนอร์ คุณจะต้องผูกเข้ากับที่อยู่ 0.0.0.0 IP

ในขณะที่คุณใช้ Flask คุณสามารถทำสิ่งนี้ได้อย่างง่ายดายในไฟล์ runserver.py โดยใช้:

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

จากนั้นเมื่อคุณเริ่มคอนเทนเนอร์และดูบันทึก คุณจะเห็นสิ่งที่ต้องการ:

 * Running on http://0.0.0.0:5000/
person Thomasleveil    schedule 17.10.2014
comment
การสังเกตที่ดี ขอบคุณ - person Atish Narlawar; 05.11.2014
comment
แม้หลังจากเพิ่ม `host='0.0.0.0' ฉันยังคงได้รับข้อผิดพลาดการเชื่อมต่อล้มเหลว ไฟล์นักเทียบท่าของฉันได้รับการกำหนดค่าเหมือนกับ @Ari เช่นกัน - person Alex F; 06.11.2019
comment
สิ่งนี้ได้รับการแก้ไขแล้วใช่ไหม? - person v09; 30.07.2020