Gibt es eine Möglichkeit, eine interaktive Shell in einem Container nur mit Docker Compose zu starten? Ich habe so etwas in meiner Docker-compose.yml ausprobiert:
myapp:
image: Alpine:latest
entrypoint: /bin/sh
Wenn ich diesen Container mit Docker-Compose starte, wird er sofort beendet. Gibt es Flags, die ich zum Befehl entrypoint oder als zusätzliche Option für myapp hinzufügen kann, um als interaktive Shell zu starten?
Ich weiß, dass es native Docker-Befehlsoptionen gibt, um dies zu erreichen.
Sie müssen die folgenden Zeilen in Ihre docker-compose.yml einfügen:
stdin_open: true
tty: true
Der erste entspricht -i
in docker run
und der zweite -t
.
Die kanonische Methode, eine interaktive Shell mit Docker-Compose zu erhalten, ist die Verwendung von: docker-compose run --rm myapp
Sie können stdin_open: true, tty: true
einstellen. Dies gibt Ihnen jedoch nicht die richtige Shell mit up
, da Protokolle aus allen Containern übertragen werden.
Sie können auch verwenden
docker exec -ti <container name> /bin/bash
um eine Shell in einen laufenden Container zu bekommen.
Im offiziellen Einstiegsbeispiel ( https://docs.docker.com/compose/gettingstarted/ ) mit dem folgenden docker-compose.yml
:
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:Alpine"
Nachdem Sie dies mit docker-compose up
gestartet haben, können Sie problemlos entweder in Ihren redis
-Container oder in Ihren web
-Container ein Shell mit
docker-compose exec redis sh
docker-compose exec web sh
Mit docker-compose fand ich den einfachsten Weg, dies zu tun, indem Sie einen docker ps -a
ausführen (nachdem ich meine Container mit docker-compose up
gestartet habe) und die ID des Containers erhalten, in dem ich eine interaktive Shell haben möchte (nennen wir es xyz123).
Dann ist es einfach eine Sache auszuführen docker exec -ti xyz123 /bin/bash
und voila, eine interaktive Shell.
docker-compose run myapp sh
sollte den Deal machen.
Es gibt einige Verwirrung mit up
/run
, aber docker-compose run
-Dokumente haben eine große Erklärung: https://docs.docker.com/compose/reference/run
Wenn sich jemand aus der Zukunft hier auch wundert:
docker-compose exec container_name sh
oder
docker-compose exec container_name bash
oder Sie können einzelne Zeilen wie ausführen
docker-compose exec container_name php -v
Das ist, nachdem Sie Ihre Container bereits betriebsbereit haben
Sie können docker-compose exec SERVICE_NAME sh
in der Befehlszeile ausführen. Der SERVICE_NAME ist in Ihrer Docker-Compose.yml definiert. Zum Beispiel,
services:
zookeeper:
image: wurstmeister/zookeeper
ports:
- "2181:2181"
Der SERVICE_NAME würde Zoookeeper sein.