Je veux essayer d'installer un programme à l'intérieur d'Ubuntu dans le docker,
Je lance donc directement depuis l'invite de commande
docker run --name ubuntu_test ubuntu:16.04 docker exec -it ubuntu_test bash
mais cela ne fonctionne pas , il dit que le conteneur ne fonctionne pas? comment puis-je exécuter le bash sans configurer de fichier docker? (J'ai essayé d'utiliser dockerfile, mais cela ne fonctionne pas à cause de problème d'installation interactive )
J'ai donc pensé que peut-être l'installer directement depuis le bash pourrait fonctionner.
5 Réponses :
Le problème est que votre commande ne maintient pas le processus en vie ni ne le garde en arrière-plan pour que le conteneur termine son travail et cesse de fonctionner. C'est comme docker run hello-world qui imprime des trucs et quitte.
docker run -it --name ubuntu_test ubuntu: 16.04 fonctionnera pour vous. La documentation explique:
Pour les processus interactifs (comme un shell), vous devez utiliser -i -t ensemble afin d'allouer un tty pour le processus conteneur. -i -t est souvent écrit -it
Une alternative serait d'exécuter le conteneur en mode détaché (-d) et de lui donner une commande longue pour qu'il ne se ferme pas immédiatement:
docker run --name ubuntu_test -d ubuntu: 16.04 sleep 300
docker exec -it ubuntu_test bash
Cela devrait fonctionner:
docker run --rm -it --name ubuntu_test -d ubuntu:16.04 docker exec -it ubuntu_test /bin/bash
Lorsque vous exécutez un conteneur, vous pouvez passer une commande à la fin de la commande qui devrait s'exécuter, comme:
docker run --name ubuntu_test -it --entrypoint bash ubuntu:16.04
S'il y a un point d'entrée spécifié dans Dockerfile, vous devez remplacer le point d'entrée:
docker run --name ubuntu_test -it ubuntu:16.04 bash
Je ne suis pas sûr, vous êtes sur la bonne voie avec l'installation dans l'image en cours d'exécution. Ce n'est pas pratique car non automatisé - la prochaine fois que vous aurez besoin de votre image, vous devrez refaire toutes les étapes et il n'y a aucun moyen de les enregistrer.
Je suggérerais plutôt d'essayer de résoudre le problème du programme d'installation interactif, vous n'êtes pas le premier à y faire face. Il existe de nombreuses façons, y compris le programme yes , qui génère automatiquement une réponse prédéfinie aux questions de l'installateur ou vous pouvez simplement utiliser echo pour envoyer le résultat à l'installateur.
Vous ne parvenez pas à démarrer le conteneur. Essayez ceci:
docker exec -it 82d0bb7754e7 /bin/bash
-i, --interactive - Gardez STDIN ouvert même s'il n'est pas attaché
-t, --tty - Attribue un pseudo-TTY
-d, --detach - Exécute le conteneur en arrière-plan et affiche l'ID du conteneur
Après cette commande listez tous vos conteneurs ( docker ps ):
Vous pouvez maintenant vous attacher à votre conteneur en cours d'exécution et faire certaines choses:
docker run -itd ubuntu:16.04 bash
(dans ce cas, pour indiquer le conteneur que j'ai utilisé l'ID, vous pouvez également utiliser le nom du conteneur )