2017-10-02 3 views
0

Je tente d'exécuter un shell interactif pour une image que je cours en utilisant docker-composer.Exécution de Docker Interactive Shell

J'ai essayé docker-run et docker-exec

[email protected]:~$ sudo docker exec -it 235197ff4f0e /bin/bash 
rpc error: code = 2 desc = oci runtime error: exec failed: container_linux.go:262: starting container process caused "exec: \"/bin/bash\": stat /bin/bash: no such file or directory" 

[email protected]:~$ sudo docker run -it drone/drone:0.7 /bin/bash 
No help topic for '/bin/bash' 

Essayer de génération de clé ssh intérieur drone, afin que je puisse cloner à partir des référentiels privés.

+0

La réponse de @larsks est la bonne réponse, cependant, je voulais développer le fait que drone ne clone pas votre dépôt dans l'image 'drone/drone'. Par conséquent, l'ajout d'une clé SSH à l'image 'drone/drone' n'aura aucun impact. Au lieu de cela, vous devez utiliser les secrets de drones (voir les documents officiels) pour enregistrer une clé secrète avec votre référentiel que vous pouvez ensuite utiliser pour cloner des dépôts git + ssh privés à l'exécution. Ou utilisez git + https pour cloner les dépendances que le drone supporte généralement avec une configuration nulle. –

Répondre

4

Il se passe plusieurs choses ici. Je voudrais jeter un oeil à la deuxième erreur d'abord:

L'image drone/drone est configuré pour exécuter automatiquement la commande /drone (que vous pouvez déterminer en utilisant docker inspect et la recherche de la clé Entrypoint). Donc, si vous exécutez:

docker run drone/drone:0.7 help 

Vous finissez en cours d'exécution, à l'intérieur du conteneur:

drone help 

Et bien sûr, si vous exécutez:

docker run drone/drone:0.7 /bin/bash 

Vous utilisez, dans le conteneur :

drone /bin/bash 

D'où le message d'erreur que vous êtes seeing ("Aucune rubrique d'aide pour '/ bin/bash'"), car vous passez une option non reconnue à la commande drone.


La première erreur est beaucoup plus simple. Votre message d'erreur est:

exec: \"/bin/bash\": stat /bin/bash: no such file or directory 

Cela semble assez clair. Il n'y a pas de /bin/bash. En fait, si vous inspectez le contenu de l'image, vous verrez qu'il n'y a qu'un système de fichiers minimal. La meilleure façon de regarder est en démarrant un récipient, puis en utilisant docker export, comme ceci:

$ docker run drone/drone:0.7 help 
[...output doesn't matter...] 
$ docker export $(docker ps -lq) | tar tf - 

qui vous montre:

.dockerenv 
dev/ 
dev/console 
dev/pts/ 
dev/shm/ 
drone 
etc/ 
etc/hostname 
etc/hosts 
etc/mtab 
etc/resolv.conf 
etc/ssl/ 
etc/ssl/certs/ 
etc/ssl/certs/ca-certificates.crt 
proc/ 
sys/ 

Il n'y a pas /bin/bash, pas ssh, pas git, etc, de sorte que vous Je ne vais pas avoir beaucoup de chance avec votre plan actuel. Vous pouvez envisager de cloner les référentiels distants sur votre hôte, puis de les exposer à votre conteneur à l'aide d'un montage de volume hôte (-v /host/path:/container path) ou de créer une image personnalisée contenant l'outil dont vous avez besoin.

+0

Cette réponse est sur place. Notez qu'il existe une image 'drone/drone: 0.8-alpine' qui peut être utilisée si vous avez besoin d'un shell à des fins de débogage. –