Ich habe einen Docker-Container mit Ubuntu, der wie folgt ausgeführt wurde:
docker run -it ubuntu /bin/bash
es scheint jedoch nicht zu haben ping
. Z.B
bash: ping: command not found
Muss ich das installieren?
Scheint ein ziemlich grundlegender Befehl zu fehlen. Ich habe versucht, whereis ping
was nichts meldet.
Antworten:
Docker-Images sind ziemlich minimal, aber Sie können sie
ping
in Ihrem offiziellen Ubuntu-Docker-Image installieren über:Möglicherweise benötigen Sie
ping
Ihr Bild nicht und möchten es nur zu Testzwecken verwenden. Das obige Beispiel hilft Ihnen dabei.Wenn Sie jedoch Ping für Ihr Image benötigen, können Sie einen
Dockerfile
odercommit
den Container, in dem Sie die obigen Befehle ausgeführt haben, für ein neues Image erstellen .Verpflichten:
Dockerfile:
Bitte beachten Sie, dass es bewährte Methoden zum Erstellen von Docker-Images gibt, z. B. das Löschen geeigneter Cache-Dateien nach usw.
quelle
Temporary failure resolving 'security.ubuntu.com'
offensichtlich fehl, weil kein Netzwerk vorhanden ist.Dies ist die Docker Hub-Seite für Ubuntu und so wird sie erstellt. Es sind nur (etwas) minimale Pakete installiert. Wenn Sie also etwas extra benötigen, müssen Sie es selbst installieren.
Normalerweise erstellen Sie jedoch eine "Docker-Datei" und erstellen sie:
Verwenden Sie Google, um Tutorials zu finden und vorhandene Docker-Dateien zu durchsuchen, um zu sehen, wie sie normalerweise funktionieren :) Zum Beispiel sollte die Bildgröße durch Ausführen
apt-get clean && rm -rf /var/lib/apt/lists/*
vonapt-get install
Befehlen minimiert werden.quelle
echo -e
Tatsächlich widerspricht es dem POSIX sh-Standard , der es ihm nur erlaubt,-e
auf seiner Ausgabe zu drucken . (Selbst bei einigen Versionen von Bash ist dies das Standardverhalten.) Verwenden Sieprintf
stattdessen:printf '%s\n' "FROM ubuntu" "RUN apt-get update && apt-get install -y iputils-ping" "CMD bash"
und lesen Sie den Abschnitt ANWENDUNGSANWENDUNG des oben verlinkten Standarddokuments.echo -e
die erwartete Leistung (sondern weist stattdessen ein standardkonformes Verhalten auf), wenn im POSIX-Modus mit--enable-xpg-echo-default
oder mit geeigneten Umgebungsvariablen oder einer anderen Laufzeitkonfiguration kompiliert wird .-n
als erstes Argument angegeben wird oder wenn Backslash-Literale vorhanden sind. Aber selbst dann ist es implementierungsdefiniert und nicht standardgarantiert, sodass das Verhalten von der einzelnen Shell abhängt in Benutzung).Im Allgemeinen ziehen die Leute das offizielle Image von Ubuntu / CentOS, aber sie erkennen nicht, dass diese Images minimal sind und nichts darüber haben.
Für Ubuntu basiert dieses Image auf offiziellen Rootfs-Tarballs von Canonical. Da es sich um eine minimale Installation von Ubuntu handelt, enthält dieses Image standardmäßig nur die Gebietsschemas C, C.UTF-8 und POSIX.
Man kann Net-Tools (einschließlich ifconfig, netstat), IP-Utils (einschließlich Ping) und andere ähnliche Curl-Elemente usw. auf dem Container installieren und ein Image aus dem Container erstellen oder eine Docker-Datei schreiben, die dieses Tool beim Erstellen des Images installiert.
Unten finden Sie ein Dockerfile-Beispiel. Beim Erstellen eines Images daraus werden die folgenden Tools enthalten:
oder starten Sie den Container vom Basis-Image und installieren Sie diese Dienstprogramme auf dem Container. Legen Sie dann das Image fest. Docker Commit -m "jede beschreibende Nachricht" container_id image_name: lattest
Auf diesem Image ist alles installiert.
quelle
Alternativ können Sie ein Docker-Image verwenden, auf dem bereits Ping installiert ist, z. B. Busybox :
quelle
apt-get iputils-ping
auf das Bild, das es braucht.Jedes Mal, wenn Sie diese Art von Fehler erhalten
Auf einem Host mit diesem Befehl, der bereits mit dieser Lösung arbeitet :
Sie haben noch keinen Host mit diesem Paket installiert? Versuchen Sie dies :
quelle
Manchmal definiert die minimale Installation von Linux in Docker den Pfad nicht und daher ist es notwendig, Ping mit .... aufzurufen.
quelle
Ich habe die folgende Aussage auf Debian 10 verwendet
quelle