web-dev-qa-db-de.com

Interaktive Shell mit Docker Compose

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.

143
drubb

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.

193
leon.valencia

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.

125
dnephin

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 
28
clay

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. 

19
David Hersey

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

18
Alex Povar

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

4

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.

1
Yu N.