Geekflare wird von unserem Publikum unterstützt. Wir können Affiliate-Provisionen durch den Kauf von Links auf dieser Website verdienen.
Teilen:

Wie führe ich Befehle in Docker Container aus?

Docker-Sicherheit
Invicti Web Application Security Scanner – die einzige Lösung, die eine automatische Verifizierung von Schwachstellen mit Proof-Based Scanning™ bietet.

Das Ausführen von Befehlen in einem Docker-Container ist einfacher als Sie denken.

Ein Docker-Container ist eine isolierte Umgebung, die normalerweise eine einzelne Anwendung mit allen erforderlichen Abhängigkeiten enthält. Oft müssen wir einige Befehle in a ausführen Andockbehälter. Es gibt verschiedene Möglichkeiten, wie wir einen Befehl in einem Container ausführen und die erforderliche Ausgabe erhalten können.

Mal sehen, wie wir das machen können.

Using Interactive Shell

Wir können direkt auf die Shell eines Containers zugreifen und unsere Befehle wie bei einem normalen Linux-Terminal ausführen. Um eine interaktive Shell eines gestoppten (nicht im laufenden Zustand befindlichen) Containers zu erhalten, können Sie Folgendes verwenden:

$ docker run -it ubuntu bash
root@c520631f652d:/#

Wie Sie sehen können, sind wir direkt in einem neuen gelandet Ubuntu Container, in dem wir unsere Befehle ausführen können. Wenn bereits ein Container ausgeführt wird, können Sie verwenden exec Befehl wie unten.

Lassen Sie uns zuerst die Container-ID herausfinden.

$ docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED       STATUS       PORTS                      NAMES
c2d969adde7a   nginx     "/docker-entrypoint.…"   2 hours ago   Up 2 hours   127.0.0.1:80->80/tcp       nginx
0960560bc24b   mariadb   "docker-entrypoint.s…"   2 hours ago   Up 2 hours   127.0.0.1:3306->3306/tcp   mariadb

Und dann in die Container-ID c2d969adde7a gelangen

$ docker exec -it c2d969adde7a bash 
root@c2d969adde7a:/#

In der obigen Ausgabe können Sie beobachten, dass wir eine gestartet haben bash Sitzung von nginx Container, der sich im laufenden Zustand befand. Hier können wir jeden unterstützten Befehl ausführen und die Ausgabe erhalten.

Hinweis - Ihr Container hat möglicherweise keine Bash und wenn ja, können Sie sh verwenden.

Ex:

docker exec -it c2d969adde7a sh

Direct Output

Oft benötigen wir nur die Ausgabe von ein oder zwei Befehlen und keine vollständige interaktive Sitzung für unsere Aufgabe. Sie können den erforderlichen Befehl in einem Container ausführen und seine Ausgabe direkt abrufen, ohne eine neue Shell-Sitzung mit zu öffnen exec Befehl ohne -it Flagge. Seine Syntax wäre:

$ docker exec <container-id or name> <command>

Hier ist ein Beispiel:

$ docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED       STATUS       PORTS                      NAMES
c2d969adde7a   nginx     "/docker-entrypoint.…"   2 hours ago   Up 2 hours   127.0.0.1:80->80/tcp       nginx
0960560bc24b   mariadb   "docker-entrypoint.s…"   2 hours ago   Up 2 hours   127.0.0.1:3306->3306/tcp   mariadb

$ docker exec 0960560bc24b ps -ef | grep mysql
mysql          1       0  0 13:35 ?        00:00:02 mysqld
$

Wir haben ausgeführt ps -ef | grep mysql Befehl innerhalb des Laufens MariaDB Container und bekam die Ausgabe direkt.

Dockerfile Way

Dies ist nicht die genaue Art und Weise, wie Sie Befehle in a ausführen können Andockbehälter obwohl es in Entwicklungssituationen oder für das anfängliche Debuggen der Bereitstellung usw. hilfreich sein kann. Wir können verwenden RUN Befehl in einer Docker-Datei. Hier ist unser Beispiel für eine Docker-Datei:

FROM nginx:latest
RUN nginx -V

Es zieht einfach das Neueste nginx Bild aus der Registrierung und führt dann die nginx -V Befehl zum Anzeigen der Nginx-Version, wenn Sie das Image erstellen.

$ docker build -t nginx-test .
Sending build context to Docker daemon  2.048kB
Step 1/2 : FROM nginx:latest
 ---> 7ce4f91ef623
Step 2/2 : RUN nginx -V
 ---> Running in 43918bbbeaa5
nginx version: nginx/1.19.9
built by gcc 8.3.0 (Debian 8.3.0-6)
built with OpenSSL 1.1.1d  10 Sep 2019
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-g -O2 -fdebug-prefix-map=/data/builder/debuild/nginx-1.19.9/debian/debuild-base/nginx-1.19.9=. -fstack-protector-strong -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -Wl,--as-needed -pie'
Removing intermediate container 43918bbbeaa5
 ---> d682277f2e50
Successfully built d682277f2e50
Successfully tagged nginx-test:latest
$

Beobachten Sie die Ausgabe von RUN Befehl im obigen Snippet. Das obige Snippet wird nur beim ersten Build angezeigt und aufeinanderfolgende Builds wiederholen das nicht RUN Befehlsausgabe. Um dieses Problem zu umgehen, können Sie es versuchen --no-cache Flagge:

$ docker build -t nginx-test . --no-cache

Die letzte Methode ist nicht der beste Weg, kann aber manchmal beim Debuggen usw. hilfreich sein.

Zusammenfassung

Befehl in einem Docker ausführen Container ist einfach und es gibt einige Methoden, um dies zu tun. Es ist eine reguläre Aufgabe eines Docker-Administrators, daher ist es hilfreich, diese Befehle zu kennen.

Als nächstes lernen Sie einige der beliebtesten Docker-Befehle.

Danke an unsere Sponsoren
Weitere großartige Lektüre zu DevOps
Treiben Sie Ihr Geschäft an
Einige der Tools und Dienste, die Ihr Unternehmen beim Wachstum unterstützen.
  • Invicti verwendet das Proof-Based Scanning™, um die identifizierten Schwachstellen automatisch zu verifizieren und innerhalb weniger Stunden umsetzbare Ergebnisse zu generieren.
    Versuchen Sie es mit Invicti
  • Web-Scraping, Wohn-Proxy, Proxy-Manager, Web-Unlocker, Suchmaschinen-Crawler und alles, was Sie zum Sammeln von Webdaten benötigen.
    Versuchen Sie es mit Brightdata
  • Semrush ist eine All-in-One-Lösung für digitales Marketing mit mehr als 50 Tools in den Bereichen SEO, Social Media und Content-Marketing.
    Versuchen Sie es mit Semrush
  • Intruder ist ein Online-Schwachstellenscanner, der Cyber-Sicherheitslücken in Ihrer Infrastruktur findet, um kostspielige Datenschutzverletzungen zu vermeiden.
    MIT DER INTELLIGENTEN SCHADENKALKULATION VON Intruder