Docker Composer conserver le récipient à l'exécution de
Je veux démarrer un service avec un menu fixe-les composer et de les conserver le récipient cours d'exécution afin que je puisse obtenir son adresse IP via le panneau inspecter". Cependant, le conteneur toujours les sorties à droite après le démarrage.
J'ai essayé d'ajouter la commande": ["sommeil", "60"]" et d'autres choses pour le menu fixe-composer.yml mais à chaque fois que j'ajoute la ligne avec la commande":..." je ne peux pas appeler "docker-composer" comme j'ai le message "Impossible de démarrer le conteneur ..... Erreur système: caractère non valide " k "à la recherche pour le début de la valeur"
J'ai aussi essayé d'ajouter "CMD sleep 60" et autres joyeusetés dans le Dockerfile lui-même, mais ces commandes ne semblent pas être exécutée.
Est-il un moyen facile de garder le contenant de son vivant ou de corriger un de mes problèmes?
EDIT:
Voici la composition du fichier que je veux faire:
version: '2'
services:
my-test:
image: ubuntu
command: bash -c "while true; do echo hello; sleep 2; done"
Ça fonctionne Si je commence ce avec docker-composer sous OS X, mais si j'essaie la même chose sous Ubuntu 16.04 il me donne le message d'erreur ci-dessus.
Si j'essaie l'approche avec le Dockerfile, le Dockerfile ressemble à ceci:
FROM ubuntu:latest
CMD ["sleep", "60"]
Qui ne semble pas faire quelque chose
EDIT 2:
Je dois corriger moi-même, s'est avéré qu'il était le même problème avec le Dockerfile et le docker-composer.yml:
Chaque fois que j'ai ajouter "CMD" pour le Dockerfile OU ajouter de la commande " ... " pour composer un fichier, j'obtiens l'erreur ci-dessus avec le caractère incorrect. Si je supprime les deux commandes, il fonctionne parfaitement.
- Veuillez inclure le docker-composer.yml, Dockerfile, et tous les scripts que vous essayez de déboguer.
- Une discussion à ce sujet, pour ceux que ça intéresse: Développement de flux de travail pour le serveur et le client en utilisant le Panneau de Composer?
Vous devez vous connecter pour publier un commentaire.
De garder un conteneur en cours d'exécution lorsque vous le démarrez avec
docker-compose
, utilisez la commande suivantecommand: tail -F anything
De sorte que votre menu fixe-composer.yml devient
et vous pouvez exécuter un shell pour entrer dans le conteneur à l'aide de la commande suivante
docker exec -i -t composename_my-test_1 bash
où
composename
est le nom quedocker-compose
ajoute à vos contenants.exit
pour en revenir à votre machine hôte. Si vous êtes sur votre machine, alors vous pouvez arrêter le conteneur à l'aide de Docker (docker stop composename_my-test_1
) ou menu fixe Composer (docker-compose stop
).docker ps -a
l'état du conteneur montreRestarting (0) 5 seconds ago
et quand j'essaiedocker exec -it data-quality-test-db-sqlite sh
il ditError response from daemon: Container [...] is restarting, wait until the container is running
Voir https://github.com/docker/compose/issues/1926#issuecomment-135068628
On pourrait utiliser
command: tail -f /dev/null
dans docker-composer à conserver le récipient en cours d'exécution.Que l'intervenant a déclaré, il nous faudrait voir le Dockerfile en question à vous donner une réponse complète, mais c'est une erreur très commune. Je peux très bien la garantie que la commande que vous essayez d'exécuter est le démarrage d'un processus d'arrière-plan. Cela peut être la commande que vous feriez exécuter en non-Docker situations, mais c'est la mauvaise chose à faire dans un Dockerfile. Par exemple, si ce que vous êtes en cours d'exécution est généralement définie comme un service système, vous pouvez utiliser quelque chose comme "systemctl start". Qui serait de commencer le processus en arrière-plan, ce qui ne fonctionnera pas. Vous devez exécuter le processus en avant-plan, de sorte que l'ensemble du processus de bloc.
Dans le Dockerfile vous pouvez utiliser la commande:
Vous pouvez utiliser
tty
option de configuration.docker-compose.yml
docker-compose up -d
à partir du terminaldocker ps
pour obtenir le numéro du conteneur ou le nomdocker inspect $container_id
docker-compose exec ubuntu /bin/bash
oudocker-compose exec ubuntu /bin/sh
docker-compose down
Bon j'ai trouvé mon erreur. Dans le Dockerfile pour l'image utilisée pour composer, j'ai spécifié que l'image de base doit être d'ubuntu:le dernier, mais j'ai déjà créé une image appelée ubuntu par moi-même et que l'image n'a pas fonctionné. Je n'ai donc pas utiliser l'original ubuntu image, mais plutôt une version corrompue de ma propre image, également appelé ubuntu.