لماذا حاوية عامل ميناء تشغيل خادم فضح المنفذ إلى العالم الخارجي على الرغم من أن يتم حظر المنفذ المذكور من قبل إيبتبلس?

أواجه مشكلة مع الخلية التي تعمل داخل حاوية عامل الميناء. تم بناء صورة الاختبار الخاصة بي من ملف الإرساء التالي:

# See: https://index.docker.io/u/brice/mysql/FROM ubuntu:12.10MAINTAINER Joni Kahara <joni.kahara@async.fi> # Because docker replaces /sbin/init: https://github.com/dotcloud/docker/issues/1024RUN dpkg-divert --local --rename --add /sbin/initctlRUN ln -s /bin/true /sbin/initctlRUN apt-get updateRUN apt-get upgrade -yRUN apt-get -y install mysql-serverRUN sed -i -e"s/^bind-address\s*=\s*127.0.0.1/bind-address = 0.0.0.0/" /etc/mysql/my.cnfRUN /usr/bin/mysqld_safe & \    sleep 10s && \    mysql -e "GRANT ALL ON *.* to 'root'@'%'; FLUSH PRIVILEGES;"EXPOSE 3306VOLUME ["/var/lib/mysql", "/var/log/mysql"]CMD ["mysqld_safe"]

بعد إنشاء صورة من الملف أعلاه ، أقوم بتشغيلها باستخدام:

docker run -p 3306:3306 asyncfi/magento-mysql

وبعد ذلك كل شيء هو تضخم ويمكنني تسجيل الدخول إلى هذا المثال من الخلية من الجهاز المحلي. ومع ذلك ، يمكنني أيضا تسجيل الدخول من أي جهاز آخر.

لقد قمت بإعداد جدار الحماية الخاص بي لتصفية كل شيء باستثناء حركة المرور القادمة إلى منافذ محددة ("المخفية" سش ، هتب ، هتبس) ، وهذا التصفية في الواقع يبدو أن العمل ؛ إذا كنت على سبيل المثال تشغيل خادم تطوير جانغو على المنفذ 1234 ثم أنا قادرة على الاتصال من الجهاز المحلي ، ولكن ليس من الخارج. لذلك يبدو أن جدار الحماية يقوم بتصفية الحزم عندما يتم توجيهها إلى خادم يعمل كعملية" عادية " ، ولكن ليس عند تشغيل الخادم داخل حاوية.

أرقام الأسطر تقول ما يلي:

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)num   pkts bytes target     prot opt in     out     source               destination1     2265  107K ACCEPT     all  --  lo     any     anywhere             anywhere2     240K  319M ACCEPT     all  --  any    any     anywhere             anywhere             ctstate RELATED,ESTABLISHED3       14  1040 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:<REDACTED>4       21  1092 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:http5        6   360 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:https6      538 34656 LOG        all  --  any    any     anywhere             anywhere             limit: avg 5/min burst 5 LOG level debug prefix "iptables DROP: "7      551 35424 DROP       all  --  any    any     anywhere             anywhereChain FORWARD (policy ACCEPT 5 packets, 296 bytes)num   pkts bytes target     prot opt in     out     source               destination1        0     0 ACCEPT     all  --  docker0 docker0  anywhere             anywhere2     6752  396K ACCEPT     all  --  docker0 !docker0  anywhere             anywhere3     125K  188M ACCEPT     all  --  any    docker0  anywhere             anywhere             ctstate RELATED,ESTABLISHEDChain OUTPUT (policy ACCEPT 51148 packets, 14M bytes)num   pkts bytes target     prot opt in     out     source               destination

نسخة عامل الميناء هو:

Client version: 0.7.3Go version (client): go1.2Git commit (client): 8502ad4Server version: 0.7.3Git commit (server): 8502ad4Go version (server): go1.2Last stable version: 0.7.3

لماذا يتعرض ميناء الخلية إلى العالم الخارجي?

بفضل # عامل الميناء مستخدمي قناة إيرك مايكل كروسبي وبول قيصر أنا الآن قادرة على الإجابة على سؤالي الخاص. المشكلة تكمن في حقيقة أنني ركضت الحاوية مثل هذا:

docker run -p 3306:3306 asyncfi/magento-mysql

هذا ينشر ميناء الحاوية إلى جميع الواجهات من الجهاز المضيف ، وهو بالتأكيد ليس ما كنت أبحث عنه في هذا الوقت. لربط فقط إلى لوكالهوست، كان من الضروري تشغيل الحاوية على النحو التالي:

docker run -p 127.0.0.1:3306:3306 asyncfi/magento-mysql

أيضا EXPOSE خط في دوكيرفيل ليس من الضروري كما يتم استخدام آلية " فضح " ل ربط الحاويات.