डॉकर - उबंटू - बैश: पिंग: कमांड नहीं मिला


337

मुझे उबंटू चलाने वाला डॉकटर कंटेनर मिला है, जो मैंने निम्न प्रकार से किया है:

docker run -it ubuntu /bin/bash

हालाँकि ऐसा लगता नहीं है ping। उदाहरण के लिए

bash: ping: command not found

क्या मुझे इसे स्थापित करने की आवश्यकता है?

लापता होने के लिए एक बहुत ही मूल आदेश लगता है। मैंने कोशिश की whereis pingजो कुछ भी रिपोर्ट नहीं करता है।


6
डॉकटर छवि के लिए यह न्यूनतम होना पूरी तरह से उपयुक्त है। ज्यादातर मामलों में, एक कंटेनर कभी भी कुछ नहीं करेगा, लेकिन एक भी एप्लिकेशन चलाएगा - ऐसा कुछ भी क्यों स्थापित करें जिसे एप्लिकेशन की आवश्यकता नहीं है?
चार्ल्स डफी

3
यदि आप केवल डायग्नोस्टिक्स चलाना चाहते हैं, तो बिजीबॉक्स (जिसमें इमेज पिंग शामिल है) चलाना सरल हो सकता है, जैसे: docker run -it --rm बिजीबॉक्स पिंग माय-सर्वर।
फ्रांसिस नॉर्टन

जवाबों:


688

डॉकर छवियां बहुत कम हैं, लेकिन आप pingअपनी आधिकारिक ubuntu docker छवि में स्थापित कर सकते हैं :

apt-get update
apt-get install iputils-ping

संभावना है कि आपको pingअपनी छवि की आवश्यकता नहीं है , और बस इसे परीक्षण प्रयोजनों के लिए उपयोग करना चाहते हैं। उपरोक्त उदाहरण आपको बाहर निकालने में मदद करेगा।

लेकिन अगर आपको अपनी छवि पर मौजूद होने के लिए पिंग की आवश्यकता है, तो आप एक Dockerfileया commitकंटेनर बना सकते हैं जिसे आपने ऊपर कमांड को एक नई छवि में चलाया था।

प्रतिबद्ध:

docker commit -m "Installed iputils-ping" --author "Your Name <name@domain.com>" ContainerNameOrId yourrepository/imagename:tag

Dockerfile:

FROM ubuntu
RUN apt-get update && apt-get install -y iputils-ping
CMD bash

कृपया ध्यान दें कि डॉक चित्र बनाने की सर्वोत्तम प्रथाएँ हैं, जैसे कि apt cache files को बाद में साफ़ करना और आदि।


उपयुक्त- Temporary failure resolving 'security.ubuntu.com'स्पष्ट रूप से विफल रहता है क्योंकि नेटवर्किंग मौजूद नहीं है।
पावेल निदोबा

32

यह उबंटू के लिए डोकर हब पेज है और यह है कि यह कैसे बनाया जाता है। इसमें केवल (कुछ हद तक) नंगे न्यूनतम पैकेज स्थापित हैं, इस प्रकार यदि आपको कुछ अतिरिक्त चाहिए तो आपको इसे स्वयं स्थापित करना होगा।

apt-get update && apt-get install -y iputils-ping

हालाँकि आमतौर पर आप एक "डॉकरीफ़ाइल" बनाकर उसका निर्माण करेंगे:

mkdir ubuntu_with_ping
cat >ubuntu_with_ping/Dockerfile <<'EOF'
FROM ubuntu
RUN apt-get update && apt-get install -y iputils-ping
CMD bash
EOF
docker build -t ubuntu_with_ping ubuntu_with_ping
docker run -it ubuntu_with_ping

कृपया ट्यूटोरियल खोजने के लिए Google का उपयोग करें और मौजूदा डॉकरफाइल्स को देखने के लिए देखें कि वे आमतौर पर कैसे काम करते हैं :) उदाहरण के लिए कमांड के apt-get clean && rm -rf /var/lib/apt/lists/*बाद छवि का आकार कम से कम होना चाहिए apt-get install


echo -eवास्तव में POSIX श मानक को परिभाषित करता है, जो इसे कुछ भी करने की अनुमति नहीं देता है लेकिन -eइसके आउटपुट पर प्रिंट करता है। (बैश के कुछ संस्करणों के साथ भी, यह डिफ़ॉल्ट व्यवहार है)। printfइसके बजाय का उपयोग करें : printf '%s\n' "FROM ubuntu" "RUN apt-get update && apt-get install -y iputils-ping" "CMD bash"और ऊपर से जुड़े मानकों दस्तावेज़ के आवेदन का उपयोग अनुभाग देखें।
चार्ल्स डफी

यहां तक ​​कि बैश भी echo -eउस तरीके का समर्थन नहीं करेगा, जिसकी आप अपेक्षा करते हैं (लेकिन इसके बजाय एक मानक-अनुरूप व्यवहार होगा) जब POSIX मोड में --enable-xpg-echo-defaultया उचित वातावरण चर या अन्य रनटाइम कॉन्फ़िगरेशन के साथ संकलित किया जाता है।
चार्ल्स डफी

(POSIX इको को -nपहले तर्क के रूप में दिए जाने पर कार्यान्वयन-परिभाषित तरीके से व्यवहार करने की अनुमति देता है, या जब कोई बैकस्लैश शाब्दिक मौजूद होता है - लेकिन फिर भी, यह कार्यान्वयन-परिभाषित है , मानक-गारंटी नहीं है, इसलिए व्यवहार व्यक्तिगत शेल पर निर्भर है उपयोग में)।
चार्ल्स डफी

टिप्पणियों और सुधारों के लिए धन्यवाद, "कॉपी-एंड-पेस्ट" दोस्ताना उदाहरण एक विचार के बाद अधिक था।
निकोनिरह

7

आम तौर पर लोग उबंटू / सेंटोस की आधिकारिक छवि को खींचते हैं, लेकिन उन्हें यह महसूस नहीं होता है कि ये चित्र न्यूनतम हैं और इसके शीर्ष पर कोई चीज नहीं है।

उबंटू के लिए, यह चित्र कैन्यनिकल द्वारा प्रदान किए गए आधिकारिक रूट्स टैफबॉल से बनाया गया है। यह देखते हुए कि यह उबंटू की एक न्यूनतम स्थापित है, इस छवि में डिफ़ॉल्ट रूप से केवल C, C.UTF-8 और POSIX स्थान शामिल हैं।

कोई नेट-टूल (ifconfig, netstat), ip-utils (पिंग शामिल है) और andy अन्य पसंद कर्ल इत्यादि को कंटेनर में स्थापित कर सकता है और कंटेनर से छवि बना सकता है या डॉकफ़िल लिख सकता है जो छवि के दौरान इन टूल को स्थापित करेगा।

नीचे Dockerfile उदाहरण है, इससे छवि बनाते समय इसमें ये उपकरण शामिल होंगे:

FROM vkitpro/ubuntu16.04
RUN     apt-get  update -y \
&& apt-get upgrade -y \
&& apt-get install iputils-ping -y \
&& apt-get install net-tools -y \
CMD bash

या बेस इमेज से कंटेनर लॉन्च करें और इन यूटिलिटीज को कंटेनर पर इंस्टॉल करें और फिर इमेज के लिए कमिट करें। docker प्रतिबद्ध- "किसी भी वर्णनात्मक संदेश" कंटेनर_ड image_name: lattest

उस छवि में सभी चीजें स्थापित होंगी।


6

वैकल्पिक रूप से आप एक डॉकर छवि का उपयोग कर सकते हैं जिसमें पहले से ही पिंग स्थापित है, उदाहरण के लिए बिजीबॉक्स :

docker run --rm busybox ping SERVER_NAME -c 2

यह एक समाधान है, लेकिन पिंग को निष्पादित करने के लिए सिर्फ एक छवि बनाना मेरे लिए ओवरकिल लगता है। मैं apt-get iputils-pingउस छवि पर नहीं बल्कि उस पर चाहता हूँ ।
renatoaraujoc

1

हर बार आपको इस तरह की त्रुटि मिलती है

bash: <command>: command not found
  • इस आदेश के साथ पहले से ही इस समाधान के साथ काम कर रहे एक मेजबान पर :

    dpkg -S $(which <command>)
    
  • उस पैकेज के साथ एक मेजबान स्थापित नहीं है? इसे आज़माएं :

    apt-file search /bin/<command>
    

1

कभी-कभी, डॉकर में लिनक्स की न्यूनतम स्थापना पथ को परिभाषित नहीं करती है और इसलिए पिंग का उपयोग करके कॉल करना आवश्यक है ...।

cd /usr/sbin
ping <ip>

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.