Shell interactif utilisant Docker Compose

Est-il possible de démarrer un shell interactif dans un conteneur à l’aide de Docker Compose uniquement? J’ai essayé quelque chose comme ça dans mon docker-compose.yml:

myapp: image: alpine:latest entrypoint: /bin/sh 

Lorsque je démarre ce conteneur en utilisant docker-compose up, il est immédiatement sorti. Existe-t-il des indicateurs que je peux append à la commande entrypoint, ou une option supplémentaire à myapp pour démarrer en tant que shell interactif?

Je sais qu’il existe des options de commande docker natives pour y parvenir, simplement curieux de savoir s’il est possible d’utiliser Docker Compose uniquement.

Vous devez inclure les lignes suivantes dans votre docker-compose.yml:

 stdin_open: true tty: true 

Le premier correspond à -i dans docker run et le second à -t .

La manière canonique d’obtenir un shell interactif avec docker-compose est d’utiliser: docker-compose run --rm myapp

Vous pouvez définir stdin_open: true, tty: true , mais cela ne vous donnera pas un shell correct, car les journaux sont diffusés depuis tous les conteneurs.

Vous pouvez aussi utiliser

 docker exec -ti  /bin/bash 

pour obtenir un shell sur un conteneur en cours d’exécution.

En utilisant docker-compose, j’ai trouvé le moyen le plus simple de faire un docker ps -a (après avoir démarré mes conteneurs avec docker-compose up ) et d’obtenir l’ID du conteneur dans lequel je veux avoir un shell interactif (appelons c’est xyz123).

Ensuite, il est facile d’exécuter docker exec -ti xyz123 /bin/bash

et le tour est joué, un shell interactif.

Dans l’exemple officiel de démarrage ( https://docs.docker.com/compose/gettingstarted/ ) avec le docker-compose.yml :

 version: '3' services: web: build: . ports: - "5000:5000" redis: image: "redis:alpine" 

Une fois que vous avez commencé avec docker-compose up , vous pouvez facilement redis votre conteneur redis ou votre conteneur web avec:

 docker-compose exec redis sh docker-compose exec web sh 

docker-compose run myapp sh devrait faire l’affaire.

Il y a une certaine confusion avec up / run , mais les documents docker-compose run ont une bonne explication: https://docs.docker.com/compose/reference/run