2016-08-08 13 views
8

काम नहीं करेगा मैं डॉकर और सेलेनियम ग्रिड के साथ एक स्वचालित परीक्षण मंच स्थापित करने की कोशिश कर रहा हूं। नीचे दिए गए आरेख में आप उस संरचना को देख सकते हैं जिसका मैं उपयोग कर रहा हूं। शीर्ष पर यूबंटू सर्वर कंप्यूट इंजन पर चल रहा है। बाईं तरफ एक डॉकर कंटेनर उबंटू 14.04 चल रहा है। कंटेनर हमारी परियोजना को स्थानीयहोस्ट पर चलाता है: 8080 Google App Engine के साथ। दाईं ओर 4444.डॉकर में बंदरगाहों का खुलासा

Docker and Selenium setup

यह जब डोकर ps चल उत्पादन होता है बंदरगाह पर चल रहे दो नोड्स के साथ सेलेनियम हब है:

CONTAINER ID  IMAGE        COMMAND     CREATED    STATUS    PORTS      NAMES 
f5ac6e3c8270  xxxxx/ubuntuport:14.04    "/bin/bash"    3 days ago   Up 13 seconds  0.0.0.0:32777->8080/tcp drunk_kalam 
4246ca0790db  eu.gcr.io/xxxxxx/selenium-chrome "/bin/sh -c 'rm -rf /" 4 weeks ago   Up 3 days          evil_mahavira 
8d06f90a1a84  eu.gcr.io/xxxxxx/selenium-firefox "/bin/sh -c 'rm -rf /" 4 weeks ago   Up 3 days          nauseous_torvalds 
dc548f638778  eu.gcr.io/xxxxxx/selenium-hub  "/opt/bin/entry_point" 4 weeks ago   Up 3 days   0.0.0.0:32770->4444/tcp modest_khorana 

तुम दोनों हब और ubuntu देख सकते हैं कंटेनर बंदरगाहों को सक्रिय करता है, और डॉकर कंटेनर चलाने वाले उबंटू होस्ट से अग्रेषित किया जाता है। मैंने Google कंप्यूट इंजन में इन बंदरगाहों को खोला है।

डॉकर कंटेनर में मैं Google App Engine sdk के साथ स्थानीय रूप से हमारी परियोजना चला रहा हूं। docker exec -it drunk_kalam bash का उपयोग करने के बाद मैं ऐप इंजन सर्वर को सक्रिय करता हूं। आदेश डॉकर कंटेनर के भीतर से चलाया जाता है। भविष्य में यह स्क्रिप्ट का हिस्सा होगा, लेकिन चूंकि यह अभी भी एक काम प्रगति पर है, यह कंटेनर के भीतर से चलाया जा रहा है। नीचे आप परियोजना चल रहा है देख सकते हैं:

[email protected]:/# google_appengine/dev_appserver.py --php_executable_path=/usr/bin/php5-cgi --php_gae_extension_path=appengine-php-extension/modules/gae_runtime_module.so ./xxxxxxxxxxxxxxx/ 
INFO  2016-08-08 12:19:49,287 sdk_update_checker.py:229] Checking for updates to the SDK. 
WARNING 2016-08-08 12:19:49,532 simple_search_stub.py:1146] Could not read search indexes from /tmp/appengine.xxxxxxxxxxx.root/search_indexes 
INFO  2016-08-08 12:19:49,535 api_server.py:205] Starting API server at: http://localhost:39475 
WARNING 2016-08-08 12:19:51,217 inotify_file_watcher.py:196] There are too many directories in your application for changes in all of them to be monitored. You may have to restart the development server to see some changes to your files. 
INFO  2016-08-08 12:19:51,218 dispatcher.py:197] Starting module "default" running at: http://localhost:8080 
INFO  2016-08-08 12:19:51,220 admin_server.py:116] Starting admin server at: http://localhost:8000 

समस्या मैं परियोजना पोर्ट 8080 के माध्यम से मैं अपने Dockerfile में बंदरगाह अवगत कराया गया है उपयोग नहीं कर सकते है, और मैं के साथ कंटेनर चल कोशिश की है - पी 8080 ध्वज के रूप में पी ध्वज। इस तरह:

docker run -dPi xxxxx/ubuntuport:14.04 

मैं बिल्कुल वैसा ही कमांड के साथ सेलेनियम हब शुरू कर दिया है, और इस बंदरगाह से सुलभ है।

nmap -p 4444 172.17.0.3 

मैं निम्नलिखित उत्पादन प्राप्त करें:: जब निम्न आदेश चलाकर

Nmap scan report for 172.17.0.2 
Host is up (0.000085s latency). 
PORT  STATE SERVICE 
8080/tcp closed http-proxy 
Nmap done: 1 IP address (1 host up) scanned in 0.03 seconds 
: जब मैं परियोजना चल डोकर कंटेनर पर 8080 पर nmap चलाने

Nmap scan report for 172.17.0.3 
Host is up (0.00010s latency). 
PORT  STATE SERVICE 
4444/tcp open krb524 
Nmap done: 1 IP address (1 host up) scanned in 0.03 seconds 

मैं इस आउटपुट प्राप्त

मुझे विश्वास है कि समस्या कहीं भी उबंटू कंटेनर के डॉकरफाइल में है। नीचे आप डॉकरफाइल देख सकते हैं, जो EXPOSE 8080 लाइन के साथ आधिकारिक उबंटू रिपोजिटरी से डॉकरफ़ाइल है।

FROM scratch 
ADD ubuntu-trusty-core-cloudimg-amd64-root.tar.gz/

EXPOSE 8080 

# a few minor docker-specific tweaks 
# see https://github.com/docker/docker/blob/9a9fc01af8fb5d98b8eec0740716226fadb3735c/contrib/mkimage/debootstrap 
RUN set -xe \ 
    \ 
    && echo '#!/bin/sh' > /usr/sbin/policy-rc.d \ 
    && echo 'exit 101' >> /usr/sbin/policy-rc.d \ 
    && chmod +x /usr/sbin/policy-rc.d \ 
    \ 
    && dpkg-divert --local --rename --add /sbin/initctl \ 
    && cp -a /usr/sbin/policy-rc.d /sbin/initctl \ 
    && sed -i 's/^exit.*/exit 0/' /sbin/initctl \ 
    \ 
    && echo 'force-unsafe-io' > /etc/dpkg/dpkg.cfg.d/docker-apt-speedup \ 
    \ 
    && echo 'DPkg::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };' > /etc/apt/apt.conf.d/docker-clean \ 
    && echo 'APT::Update::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };' >> /etc/apt/apt.conf.d/docker-clean \ 
    && echo 'Dir::Cache::pkgcache ""; Dir::Cache::srcpkgcache "";' >> /etc/apt/apt.conf.d/docker-clean \ 
    \ 
    && echo 'Acquire::Languages "none";' > /etc/apt/apt.conf.d/docker-no-languages \ 
    \ 
    && echo 'Acquire::GzipIndexes "true"; Acquire::CompressionTypes::Order:: "gz";' > /etc/apt/apt.conf.d/docker-gzip-indexes \ 
    \ 
    && echo 'Apt::AutoRemove::SuggestsImportant "false";' > /etc/apt/apt.conf.d/docker-autoremove-suggests 

RUN rm -rf /var/lib/apt/lists/* 

RUN sed -i 's/^#\s*\(deb.*universe\)$/\1/g' /etc/apt/sources.list 

CMD ["/bin/bash"] 

बंदरगाह का पर्दाफाश करने के लिए प्रयोग किया जाता आदेश केवल एक अलग पोर्ट संख्या के साथ, सेलेनियम हब की तरह ही है। मुझे यह पता लगाना प्रतीत नहीं होता कि यह बंदरगाह क्यों बंद रहता है। किसी भी सहायता की सराहना की जाएगी।

अग्रिम

Tijn

उत्तर

2

अपने उत्पादन से धन्यवाद: 0.0.0.0:32777->8080/tcp। यह कहता है कि बंदरगाह 32777 सभी इंटरफेस पर सुनकर कंटेनर के अंदर पोर्ट 8080 पर मैप (एनएटी और डॉकर-प्रॉक्सी के साथ) मैप किया जाएगा। इसलिए आपको 8080 के बजाय पोर्ट 32777 तक पहुंचने की आवश्यकता होगी। यह यादृच्छिक पोर्ट मैपिंग तब होता है जब आप एक पोर्ट का पर्दाफाश करते हैं और -P के साथ साझा करते हैं।

आप एक यादृच्छिक मानचित्रण के बिना एक विशिष्ट पोर्ट साझा करना चाहते हैं, तो आप छोटे अक्षर पी विकल्प के साथ इसे परिभाषित कर सकते हैं: -p 8080:8080 या यहाँ तक कि -p 8888:8080 कंटेनर के पोर्ट 8080 में पोर्ट 8888 मैप करने के लिए।


चैट सत्र से, यह कंटेनर के अंदर लूपबैक पर एप्लिकेशन सुन रहा है। netstat -lnt के साथ, यह पता चला है:

tcp 0 0 127.0.0.1:8080 0.0.0.0:* LISTEN 

0.0.0.0 करने के लिए बाध्य करने के लिए आवेदन अद्यतन कर रहा है पोर्ट अग्रेषण अपेक्षा के अनुरूप काम करने की अनुमति दी।

+0

मैं 32777 पोर्ट तक पहुंचने में सक्षम हूं। लेकिन मानचित्रण काम नहीं करेगा क्योंकि 8080 बंदरगाह बंद है। इसलिए मेरा उबंटू होस्ट डॉकर कंटेनर को acces नहीं कर सकता है। मैंने इसे गैर-यादृच्छिक बंदरगाहों पर भी मैप करने का प्रयास किया है, लेकिन तथ्य यह है कि डॉकर कंटेनर पर 8080 पोर्ट बंद रहता है। – Tijn

+0

पोर्ट 8080 पर क्या सुनना चाहिए? आपके पीएस आउटपुट से, आपने बैश लॉन्च किया। खोल स्वयं नेटवर्क यातायात के लिए नहीं सुनेंगे। – BMitch

+0

डॉकर कंटेनर में मैं Google App Engine sdk के साथ स्थानीय रूप से हमारी वेबसाइट चला रहा हूं। यह पोर्ट 8080 पर सक्रिय है। और मैं इसे पोर्ट 8080 पर सुने बिना एक्सेस नहीं कर सकता। स्पष्टीकरण के लिए: सेलेनियम हब को डॉकर कंटेनर के लोकहोस्ट पर परीक्षण चलाने के लिए माना जाता है। – Tijn

संबंधित मुद्दे