นักเทียบท่า - Ubuntu - bash: ping: ไม่พบคำสั่ง


337

ฉันมีนักเทียบท่าที่ใช้ Ubuntu ซึ่งฉันทำดังนี้

docker run -it ubuntu /bin/bash

pingแต่มันไม่ได้ดูเหมือนจะมี เช่น

bash: ping: command not found

ฉันจำเป็นต้องติดตั้งหรือไม่

ดูเหมือนว่าคำสั่งพื้นฐานที่จะหายไป ฉันพยายามwhereis pingที่ไม่รายงานอะไรเลย


6
มันเหมาะสมอย่างยิ่งสำหรับภาพนักเทียบท่าที่จะน้อยที่สุด ในกรณีส่วนใหญ่คอนเทนเนอร์จะไม่ทำอะไรเลยนอกจากเรียกใช้แอปพลิเคชันเดียว - เหตุใดจึงต้องติดตั้งแอปพลิเคชันใด ๆ ที่ไม่ต้องการ
Charles Duffy

3
หากคุณต้องการเรียกใช้การวินิจฉัยมันอาจจะง่ายกว่าที่จะเรียกใช้ busybox (รูปภาพใดมีการ ping) เช่น: docker run -it - rm busybox ping my-server
Francis Norton

คำตอบ:


688

ภาพนักเทียบท่านั้นค่อนข้างเล็ก แต่คุณสามารถติดตั้งpingในอิมเมจ Docker อย่างเป็นทางการของคุณผ่าน:

apt-get update
apt-get install iputils-ping

โอกาสที่คุณไม่ต้องการpingภาพของคุณและเพียงแค่ต้องการใช้มันเพื่อการทดสอบ ตัวอย่างข้างต้นจะช่วยคุณ

แต่ถ้าคุณต้องการ ping อยู่ในรูปภาพคุณสามารถสร้าง a Dockerfileหรือcommitcontainer ที่คุณใช้คำสั่งข้างต้นเพื่อสร้างรูปภาพใหม่

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 หลังจากและอื่น ๆ


apt-get ล้มเหลวTemporary failure resolving 'security.ubuntu.com'อย่างเห็นได้ชัดเพราะไม่มีเครือข่าย
Pavel Niedoba

32

นี่คือหน้า Docker Hub สำหรับ Ubuntu และนี่คือวิธีการสร้าง มีการติดตั้งแพ็คเกจขั้นต่ำ (ค่อนข้าง) เท่านั้นดังนั้นหากคุณต้องการอะไรเพิ่มเติมคุณต้องติดตั้งด้วยตัวเอง

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

อย่างไรก็ตามโดยปกติคุณจะต้องสร้าง "Dockerfile" และสร้าง:

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 เพื่อค้นหาบทช่วยสอนและเรียกดู Dockerfiles ที่มีอยู่เพื่อดูว่าพวกเขามักทำสิ่งต่าง ๆ อย่างไร :) ตัวอย่างเช่นควรย่อขนาดรูปภาพให้เล็กที่สุดโดยเรียกใช้apt-get clean && rm -rf /var/lib/apt/lists/*หลังจากapt-get installคำสั่ง


echo -eจริงแล้วท้าทายมาตรฐาน POSIX shซึ่งไม่อนุญาตให้ทำอะไรนอกจากพิมพ์-eบนเอาต์พุต (แม้จะมี bash บางรุ่นนั่นก็เป็นพฤติกรรมเริ่มต้น) ใช้printfแทน: printf '%s\n' "FROM ubuntu" "RUN apt-get update && apt-get install -y iputils-ping" "CMD bash"และดูส่วนการใช้แอปพลิเคชันของเอกสารมาตรฐานที่เชื่อมโยงข้างต้น
Charles Duffy

แม้ทุบตีจะไม่สนับสนุนecho -eวิธีที่คุณคาดหวัง (แต่จะมีพฤติกรรมตามมาตรฐาน) เมื่ออยู่ในโหมด POSIX ที่คอมไพล์ด้วย--enable-xpg-echo-defaultหรือมีตัวแปรสภาพแวดล้อมที่เหมาะสมหรือการกำหนดค่ารันไทม์อื่น ๆ
Charles Duffy

(POSIX อนุญาตให้ echo ทำงานในลักษณะที่กำหนดตามการนำไปใช้เมื่อได้รับ-nเป็นอาร์กิวเมนต์แรกหรือเมื่อมีเครื่องหมายแบ็กสแลชใด ๆ ปรากฏอยู่ - แต่ถึงกระนั้นก็ตามมันเป็นตัวกำหนดการใช้งานไม่ได้รับประกันมาตรฐานดังนั้นพฤติกรรมจึงขึ้นอยู่กับแต่ละเชลล์ กำลังใช้งาน)
Charles Duffy

ขอบคุณสำหรับความคิดเห็นและการปรับปรุงตัวอย่างที่เป็นมิตร "คัดลอกและวาง" เป็นมากกว่าความคิด
NikoNyrh

7

โดยทั่วไปแล้วผู้คนจะดึงภาพทางการของ Ubuntu / CentOS แต่พวกเขาไม่ทราบว่าภาพเหล่านี้มีน้อยและไม่มีสิ่งใดอยู่ด้านบน

สำหรับ Ubuntu ภาพนี้สร้างขึ้นจาก tarballs รูทอย่างเป็นทางการที่จัดทำโดย Canonical ระบุว่าเป็นการติดตั้งขั้นต่ำของ Ubuntu รูปภาพนี้มีเฉพาะตำแหน่งที่ตั้ง C, C.UTF-8 และ POSIX ตามค่าเริ่มต้น

หนึ่งสามารถติดตั้งเครื่องมือเน็ต (รวมถึง ifconfig, netstat), ip-utils (รวมถึง ping) และอื่น ๆ ที่ชอบ curl ฯลฯ บนภาชนะและสามารถสร้างภาพจากภาชนะหรือสามารถเขียน Dockerfile ที่จะติดตั้งเครื่องมือเหล่านี้ในขณะที่สร้างภาพ

ด้านล่างเป็นตัวอย่าง 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

หรือเรียกใช้ container จากอิมเมจพื้นฐานและติดตั้งยูทิลิตี้เหล่านี้บน container จากนั้นส่งไปยังอิมเมจ นักเทียบท่ากระทำ -m "ข้อความอธิบายใด ๆ " container_id image_name: lattest

ภาพนั้นจะติดตั้งทุกสิ่ง


6

หรือคุณสามารถใช้รูปภาพ Docker ที่ติดตั้ง ping ไว้แล้วเช่นbusybox :

docker run --rm busybox ping SERVER_NAME -c 2

มันเป็นทางออก แต่การสร้างภาพเพื่อใช้งาน ping นั้นดูเหมือนว่าจะเกินความคิดของฉัน ฉันต้องการapt-get iputils-pingภาพที่ต้องการ
renatoaraujoc

1

ทุกครั้งที่คุณได้รับข้อผิดพลาดประเภทนี้

bash: <command>: command not found

1

บางครั้งการติดตั้ง Linux ใน Docker น้อยที่สุดไม่ได้กำหนดเส้นทางและดังนั้นจึงจำเป็นต้องเรียก ping โดยใช้ ....

cd /usr/sbin
ping <ip>

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.