649 votes

Docker - Ubuntu - bash : ping : commande non trouvée

J'ai un conteneur Docker sous Ubuntu que j'ai fait comme suit :

docker run -it ubuntu /bin/bash

mais il ne semble pas avoir ping . Par exemple

bash: ping: command not found

Dois-je l'installer ?

Cela semble être une commande assez basique pour être manquante. J'ai essayé whereis ping qui ne rapporte rien.

13 votes

Il est tout à fait approprié qu'une image Docker soit minimale. Dans la plupart des cas, un conteneur ne fera jamais rien d'autre que d'exécuter une seule application - pourquoi installer quelque chose dont cette application n'a pas besoin ?

6 votes

Si vous souhaitez simplement exécuter des diagnostics, il peut être plus simple d'exécuter busybox (dont l'image inclut ping), par exemple : docker run -it --rm busybox ping my-server.

1279voto

Farhad Farahi Points 12100

Les images Docker sont assez minimales, mais vous pouvez installer ping dans votre image docker officielle ubuntu via :

apt-get update
apt-get install iputils-ping

Il y a des chances que vous n'ayez pas besoin ping votre image, et vous voulez juste l'utiliser à des fins de test. L'exemple ci-dessus vous aidera.

Mais si vous avez besoin que ping existe sur votre image, vous pouvez créer un fichier Dockerfile ou commit le conteneur dans lequel vous avez exécuté les commandes ci-dessus dans une nouvelle image.

Engagez-vous :

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

Veuillez noter qu'il existe de bonnes pratiques pour la création d'images docker, comme l'effacement des fichiers cache d'apt, etc.

0 votes

Apt-get échoue avec Temporary failure resolving 'security.ubuntu.com' évidemment parce que le réseau n'est pas présent.

0 votes

J'avais pris l'habitude d'utiliser apt install et je me suis retrouvé avec "package not found", mais comme le dit la réponse, apt-get fonctionne très bien.

1 votes

Si vous avez besoin d'installer sur un conteneur en cours d'exécution, vous devez exécuter avec les privilèges Root, donc exécuter docker exec -u 0 -it <container> /bin/bash . Où -u 0 est l'utilisateur Root.

67voto

NikoNyrh Points 1008

Ce site est la page de Docker Hub pour Ubuntu et ce est la façon dont il est créé. Seuls les paquets minimums sont installés, donc si vous avez besoin de quelque chose en plus, vous devez l'installer vous-même.

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

Cependant, en général, il faut créer un "Dockerfile" et le construire :

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

Veuillez utiliser Google pour trouver des tutoriels et parcourir les Dockerfiles existants pour voir comment ils font habituellement les choses :) Par exemple, la taille de l'image devrait être minimisée en exécutant apt-get clean && rm -rf /var/lib/apt/lists/* après apt-get install des commandes.

1 votes

echo -e en fait défie la norme POSIX sh ce qui ne lui permet pas de faire autre chose que d'imprimer. -e sur sa sortie. (Même avec certaines versions de bash, c'est le comportement par défaut). Utilisez printf à la place : printf '%s\n' "FROM ubuntu" "RUN apt-get update && apt-get install -y iputils-ping" "CMD bash" et consultez la section UTILISATION DES APPLICATIONS du document de normes susmentionné.

0 votes

Même bash ne supporte pas echo -e de la manière dont vous l'attendez (mais au lieu de cela, il aura un comportement conforme aux normes) lorsqu'il est compilé en mode POSIX avec la commande --enable-xpg-echo-default ou avec des variables d'environnement appropriées ou d'autres configurations d'exécution.

0 votes

(POSIX permet à echo de se comporter d'une manière définie par l'implémentation lorsqu'on lui donne -n en tant que premier argument, ou lorsque des littéraux backslash sont présents -- mais même dans ce cas, c'est définie par la mise en œuvre (ce qui n'est pas garanti par les standards, le comportement dépend donc de l'interpréteur de commandes utilisé).

20voto

Ivan Points 507

Vous pouvez également utiliser une image Docker dans laquelle ping est déjà installé, par exemple. busybox :

docker run --rm busybox ping SERVER_NAME -c 2

2 votes

C'est une solution, mais créer une image juste pour exécuter ping me semble exagéré. Je préfère apt-get iputils-ping sur l'image qui en a besoin.

12voto

Vaseem007 Points 780

En général, les gens utilisent l'image officielle d'Ubuntu/CentOS, mais ils ne réalisent pas que ces images sont minimales et qu'il n'y a rien par-dessus.

Pour Ubuntu, cette image est construite à partir des tarballs officiels de rootfs fournis par Canonical. Étant donné qu'il s'agit d'une installation minimale d'Ubuntu, cette image n'inclut par défaut que les locales C, C.UTF-8 et POSIX.

On peut installer net-tools (comprend ifconfig, netstat), ip-utils (comprend ping) et d'autres comme curl etc. sur le conteneur et créer une image à partir du conteneur ou écrire un Dockerfile qui installera ces outils lors de la création de l'image.

Voici un exemple de Dockerfile, en créant l'image à partir de celui-ci, il inclura ces outils :

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

ou lancer le conteneur à partir de l'image de base et installer ces utilitaires sur le conteneur puis faire un commit sur l'image. docker commit -m "tout message descriptif" container_id image_name:lattest

Cette image aura tout installé.

4voto

Alex Javarotti Points 78

Parfois, l'installation minimale de Linux dans Docker ne définit pas le chemin et il est donc nécessaire d'appeler ping en utilisant .....

cd /usr/sbin
ping <ip>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X