Docker - Ubuntu - bash: ping: perintah tidak ditemukan

338

Saya punya wadah Docker yang menjalankan Ubuntu yang saya lakukan sebagai berikut:

docker run -it ubuntu /bin/bash

Namun sepertinya tidak ping. Misalnya

bash: ping: command not found

Apakah saya perlu menginstalnya?

Tampaknya perintah yang cukup mendasar tidak ada. Saya mencoba whereis pingyang tidak melaporkan apa pun.

Snowcrash
sumber
6
Ini sepenuhnya tepat untuk gambar Docker menjadi minimal. Dalam kebanyakan kasus, sebuah wadah tidak akan pernah melakukan apa pun selain menjalankan satu aplikasi - mengapa menginstal apa pun yang tidak diperlukan aplikasi?
Charles Duffy
3
Jika Anda hanya ingin menjalankan diagnostik, mungkin lebih mudah untuk menjalankan busybox (yang termasuk gambar ping), misalnya: docker run -it --rm busybox ping server saya.
Francis Norton

Jawaban:

689

Gambar Docker cukup minim, tetapi Anda dapat menginstal pinggambar docker ubuntu resmi Anda melalui:

apt-get update
apt-get install iputils-ping

Kemungkinannya adalah Anda tidak perlu pinggambar Anda, dan hanya ingin menggunakannya untuk tujuan pengujian. Contoh di atas akan membantu Anda.

Tapi jika Anda perlu ping ada pada gambar Anda, Anda dapat membuat Dockerfileatau commitwadah Anda menjalankan perintah di atas ke gambar baru.

Melakukan:

docker commit -m "Installed iputils-ping" --author "Your Name <[email protected]>" ContainerNameOrId yourrepository/imagename:tag

Dockerfile:

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

Harap perhatikan ada praktik terbaik untuk membuat gambar buruh pelabuhan, Seperti menghapus file cache yang tepat setelah dan lain-lain

Farhad Farahi
sumber
apt-get gagal dengan Temporary failure resolving 'security.ubuntu.com'jelas karena jaringan tidak ada.
Pavel Niedoba
32

Ini adalah halaman Hub Docker untuk Ubuntu dan ini adalah bagaimana ia dibuat. Ini hanya memiliki (agak) paket minimum yang terinstal, jadi jika Anda memerlukan sesuatu yang ekstra Anda harus menginstalnya sendiri.

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

Namun biasanya Anda akan membuat "Dockerfile" dan membangunnya:

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

Silakan gunakan Google untuk menemukan tutorial dan menelusuri Dockerfiles yang ada untuk melihat bagaimana mereka biasanya melakukan hal-hal :) Misalnya ukuran gambar harus diminimalkan dengan menjalankan apt-get clean && rm -rf /var/lib/apt/lists/*setelah apt-get installperintah.

NikoNyrh
sumber
echo -esebenarnya menentang standar sh POSIX , yang tidak mengizinkannya melakukan apapun selain mencetak -epada hasilnya. (Bahkan dengan beberapa versi bash, itulah perilaku default). Gunakan printfsebaliknya:, printf '%s\n' "FROM ubuntu" "RUN apt-get update && apt-get install -y iputils-ping" "CMD bash"dan lihat bagian PENGGUNAAN APLIKASI dari dokumen standar yang ditautkan di atas.
Charles Duffy
Bahkan bash tidak akan mendukung echo -ecara yang Anda harapkan (tetapi sebaliknya akan memiliki perilaku yang sesuai standar) ketika dalam mode POSIX dikompilasi --enable-xpg-echo-default, atau dengan variabel lingkungan yang sesuai atau konfigurasi runtime lainnya.
Charles Duffy
(POSIX memungkinkan gema untuk berperilaku dalam cara yang ditentukan implementasi ketika diberikan -nsebagai argumen pertama, atau ketika ada backslash literal hadir - tetapi meskipun demikian, itu implementasi yang ditentukan , tidak dijamin standar, sehingga perilaku tergantung pada shell individu digunakan).
Charles Duffy
Terima kasih atas komentar dan perbaikannya, contoh ramah "salin dan tempel" lebih merupakan pemikiran setelahnya.
NikoNyrh
7

Umumnya orang menarik gambar resmi Ubuntu / CentOS tetapi mereka tidak menyadari bahwa gambar-gambar ini minimal dan tidak memiliki apa pun di atas itu.

Untuk Ubuntu, gambar ini dibangun dari tarbal rootfs resmi yang disediakan oleh Canonical. Karena ini adalah instalasi minimal Ubuntu, gambar ini hanya menyertakan lokal C, C.UTF-8, dan POSIX secara default.

Satu dapat menginstal alat-net (termasuk ifconfig, netstat), ip-utils (termasuk ping) dan lain-lain suka curl dll pada wadah dan dapat membuat gambar dari wadah atau dapat menulis Dockerfile yang akan menginstal alat ini saat membuat gambar.

Di bawah ini adalah contoh Dockerfile, sementara membuat gambar dari ini akan mencakup alat-alat ini:

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

atau luncurkan wadah dari gambar dasar dan instal utilitas ini pada wadah dan kemudian komit ke gambar. docker commit -m "any deskriptif message" container_id image_name: lattest

Gambar itu akan menginstal semuanya.

Vaseem007
sumber
6

Atau Anda dapat menggunakan gambar Docker yang sudah diinstal ping, mis. Busybox :

docker run --rm busybox ping SERVER_NAME -c 2
Ivan
sumber
Ini solusi, tetapi membuat gambar hanya untuk mengeksekusi ping tampaknya berlebihan bagi saya. Saya lebih suka apt-get iputils-pingpada gambar yang membutuhkannya.
renatoaraujoc
1

Setiap kali Anda mendapatkan kesalahan semacam ini

bash: <command>: command not found
  • Pada host dengan perintah yang sudah bekerja dengan solusi ini :

    dpkg -S $(which <command>)
    
  • Tidak memiliki host dengan paket yang diinstal? Coba ini :

    apt-file search /bin/<command>
    
Pablo A
sumber
1

Kadang-kadang, instalasi minimal Linux di Docker tidak menentukan path dan oleh karena itu perlu untuk memanggil ping menggunakan ....

cd /usr/sbin
ping <ip>
Alex Javarotti
sumber
0

Saya telah menggunakan pernyataan di bawah ini pada debian 10

apt-get install iputils-ping
Anthony Wambui
sumber