سؤال فشل الكشف عن منفذ Docker في نظام التشغيل Mac OS X


أولا قبالة ذهبت من خلال البرنامج التعليمي وبدأت التطبيق قارورة من البرنامج التعليمي في الحاوية. انها عملت.

seraf$ docker run -d -P training/webapp python app.py

ثم عثرت على عنوان IP لجهازي الافتراضي

seraf$ boot2docker ip
192.168.59.103

ويمكن الوصول إلى التطبيق المثال على http://192.168.59.103:49157:

في ما يلي صورة البرنامج التعليمي Dockerfile:

FROM ubuntu:12.04
MAINTAINER Docker Education Team <education@docker.com>
RUN apt-get update
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y -q curl python-all python-pip wget
ADD ./webapp /opt/webapp/
WORKDIR /opt/webapp
RUN pip install -r requirements.txt
EXPOSE 5000
CMD ["python", "app.py"]

الآن أحاول تشغيل تطبيق القارورة الخاص بي داخل حاوية عامل ميناء. أنا أبني صورة:

FROM ubuntu:12.04
MAINTAINER Serafim Suhenky <email@example.com>
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update
RUN apt-get install -y python-dev
RUN apt-get install -y python-pip
RUN pip install gunicorn
RUN pip install flask
#VOLUME /web
ADD ./casa-web /web
WORKDIR /web
EXPOSE 5000
ENTRYPOINT python casa-web.py

ثم صنع حاوية:

docker run -d -P seraf1m/web-app

أو مع صورة أكثر بساطة:

docker run -d -P seraf1m/web-app python casa-web.py

أو هذا:

docker run -d -p 5000:5000 seraf1m/web-app python casa-web.py

وكل شيء يسير على ما يرام حتى الآن ؛ بدأت الحاويات والمنفذ المكشوف ويمكنني رؤية سجلات التطبيق.

لكن لا يمكنني الوصول إلى تطبيقي عبر http://192.168.59.103:49158 أو غيرها من المنافذ docker ps يظهر لي.

في الوقت نفسه يمكنني الوصول إلى التطبيق التعليمي.

ما الخطأ في صورتي؟ ربما شيء مع الجهاز الظاهري؟

seraf$ docker -v
Docker version 1.5.0, build a8a31ef

لقد حاولت أيضا هذا الإصلاح. لا أعرف كيف يعمل:

#!/bin/bash
for i in {49000..49900}; do
 VBoxManage modifyvm "boot2docker-vm" --natpf1 "tcp-port$i,tcp,,$i,,$i";
 VBoxManage modifyvm "boot2docker-vm" --natpf1 "udp-port$i,udp,,$i,,$i";
done

أغلقت الجهاز الافتراضي قبل تشغيله. ثم التبديل ولم يتغير شيء. أنا تدحرجته.


7
2018-02-17 05:52


الأصل




الأجوبة:


كان هذا خطأ غبي. كل شيء يعمل بشكل جيد مع عامل ميناء.

كانت المشكلة في تطبيق Flask ، فهي تستمع فقط إلى localhost افتراضيًا. لجعله يستمع إلى الشبكة تحتاج إلى ضبط

app.run (المضيف = '0.0.0.0')

إذن كيف يعمل كل شيء:

  1. Boot2docker بتثبيت الجهاز الظاهري لكم ماك. هل يمكن أن ssh في ذلك مع boot2docker ssh.
  2. يشبه هذا الجهاز الظاهري بوابة لتشغيل الحاويات. كل حاوية هي جهاز كمبيوتر افتراضي خلف تلك البوابة. إذا كنت ssh'ed إلى VM ، يمكنك ping حاويات. لمعرفة IP الحاوية يجب عليك إرفاقه

عامل ميناء exec -it باش

أنت الآن داخل الحاوية هل يمكن أن تعمل ifconfig أو ip addr show لرؤيتك حاوي IP.

  1. بمجرد أن يكون لديك ip الخاص بالحاوية ، يمكنك اختباره من جهاز vm. وحاول الاتصال بالمنفذ المكشوف. (إذا رأيت 0.0.0.0:49155->5000/tcp في docker ps ثم إلى 5000)

curl container_ip: container_port

بالنسبة لي رفضت الاتصال ، ولكن يمكنني الاتصال من الحاوية نفسها عبر curl localhost:5000

هذا كيف برزت بها.


7
2018-02-17 06:58



اكتشاف الذات لطيفة! إن الإطّلاع على localhost في مقابل 0.0.0.0 خطأ شائع في العديد من التطبيقات ، لذا من الجيد أنك تشرح عمليتك هنا. سوف تساعد بالتأكيد الآخرين. - JakeGould