Docker - Ubuntu - bash: ping: komut bulunamadı


338

Aşağıdaki gibi yaptığım Ubuntu çalıştıran bir Docker konteyner var:

docker run -it ubuntu /bin/bash

ancak öyle görünmüyor ping. Örneğin

bash: ping: command not found

Bunu yüklemem gerekir mi?

Eksik olmak için oldukça basit bir komut görünüyor. Denedim whereis pingki hiçbir şey rapor etmedi.


6
Docker görüntüsünün minimum düzeyde olması tamamen uygundur. Çoğu durumda, bir kap asla tek bir uygulama yürütmekten başka bir şey yapmaz - neden uygulamanın gerektirmediği bir şey yüklemelisiniz?
Charles Duffy

3
Tanılamayı çalıştırmak istiyorsanız, meşgul kutusunu (hangi görüntü ping içerir) çalıştırmak daha kolay olabilir, örneğin: docker run -it --rm busybox ping my server.
Francis Norton

Yanıtlar:


689

Docker görüntüleri oldukça azdır, ancak pingresmi ubuntu docker görüntüsüne şu şekilde yükleyebilirsiniz :

apt-get update
apt-get install iputils-ping

Muhtemelen pingresminize ihtiyacınız yoktur ve sadece test amacıyla kullanmak istersiniz. Yukarıdaki örnek size yardımcı olacaktır.

Ancak görüntünüzde ping gerekiyorsa , yukarıdaki komutları yeni bir görüntüye çalıştırdığınız bir Dockerfileveya commitkapsayıcı oluşturabilirsiniz .

Teslim Et:

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

Docker görüntüleri oluşturmaya yönelik en iyi uygulamaların olduğunu lütfen unutmayın.


Temporary failure resolving 'security.ubuntu.com'ağ mevcut olmadığı için apt-get açıkça başarısız oluyor .
Pavel Niedoba

32

Bu Ubuntu için Docker Hub sayfasıdır ve bu şekilde oluşturulur. Sadece (biraz) çıplak minimum paketleri yüklüdür, bu nedenle ekstra bir şeye ihtiyacınız varsa kendiniz yüklemeniz gerekir.

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

Ancak genellikle bir "Dockerfile" oluşturur ve derlersiniz:

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

Lütfen öğreticileri bulmak için Google'ı kullanın ve genellikle bir şeylerin nasıl yapıldığını görmek için mevcut Docker dosyalarına göz atın :) Örneğin, komutların apt-get clean && rm -rf /var/lib/apt/lists/*ardından çalıştırılarak resim boyutu en aza indirilmelidir apt-get install.


echo -easlında POSIX sh standardını karşılar , bu -eda çıktısına yazdırmaktan başka bir şey yapmasına izin vermez . (Bazı bash sürümlerinde bile, bu varsayılan davranıştır). printfBunun yerine: kullanın printf '%s\n' "FROM ubuntu" "RUN apt-get update && apt-get install -y iputils-ping" "CMD bash"ve yukarıdaki bağlantılı standartlar belgesinin UYGULAMA KULLANIMI bölümüne bakın.
Charles Duffy

Bash bile echo -e, POSIX modunda derlendiğinde --enable-xpg-echo-defaultveya uygun ortam değişkenleri veya diğer çalışma zamanı yapılandırması ile beklediğiniz şekilde desteklemeyecektir (bunun yerine standartlara uygun bir davranışa sahip olacaktır) .
Charles Duffy

(POSIX, -nilk argüman olarak verildiğinde veya ters eğik çizgi değişmezleri bulunduğunda eko'nun uygulama tanımlı bir şekilde davranmasına izin verir - ancak o zaman bile , standart olarak garanti edilmeyen uygulama tanımlıdır , bu nedenle davranış münferit kabuğa bağlıdır. kullanımda).
Charles Duffy

Yorumlarınız ve geliştirmeleriniz için teşekkürler, "kopyala ve yapıştır" dostu örnek, daha sonra düşünülmüş bir örnekti.
NikoNyrh

7

Genellikle insanlar Ubuntu / CentOS'un resmi imajını çekerler, ancak bu görüntülerin minimum düzeyde olduğunu ve bunun üstünde hiçbir şey olmadığını fark etmezler.

Ubuntu için, bu görüntü Canonical tarafından sağlanan resmi rootfs tarballlarından yapılmıştır. Ubuntu'nun minimal bir kurulumu olduğu göz önüne alındığında, bu görüntü varsayılan olarak yalnızca C, C.UTF-8 ve POSIX yerel ayarlarını içerir.

Biri net-tools (ifconfig, netstat dahil), ip-utils (ping dahil) ve diğer curl vb.

Aşağıda Dockerfile örneği, bundan resim oluştururken şu araçları içerecektir:

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

veya temel görüntüden kapsayıcıyı başlatın ve bu yardımcı programları kapsayıcıya yükleyin ve ardından resme geçin. docker taahhüt -m "herhangi bir açıklayıcı mesaj" container_id image_name: lattest

Bu görüntüde her şey yüklü olacak.


6

Alternatif olarak, zaten ping yüklenmiş bir Docker görüntüsü kullanabilirsiniz, örneğin busybox :

docker run --rm busybox ping SERVER_NAME -c 2

Bu bir çözüm, ama sadece ping uygulamak için bir görüntü oluşturmak benim için aşırıya kaçmış gibi görünüyor. İhtiyacı apt-get iputils-pingolan görüntüyü tercih ederim .
renatoaraujoc

1

Bu tür bir hata her aldığınızda

bash: <command>: command not found
  • Bu komutun bulunduğu bir ana bilgisayarda zaten bu çözümle çalışıyor :

    dpkg -S $(which <command>)
    
  • Bu paketin yüklü olduğu bir ana makineniz yok mu? Şunu deneyin :

    apt-file search /bin/<command>
    

1

Bazen, Docker'da Linux'un asgari kurulumu yolu tanımlamaz ve bu nedenle ping'i kullanarak çağırmak gerekir.

cd /usr/sbin
ping <ip>

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.