85 votes

Comment accéder à la machine virtuelle créée par HyperKit de Docker ?

Docker pour Mac utilise une machine virtuelle Linux créée par HyperKit pour stocker et exécuter des conteneurs sur Mac.

Avec Docker Toolbox, je peux simplement ouvrir VirtualBox et accéder à la machine virtuelle docker-machine. Mais avec Docker pour Mac, comment puis-je accéder à la machine virtuelle créée par HyperKit ?

141voto

Jifeng Zhang Points 491

Mise à jour du 2019-01-31, grâce à la mise à jour de ru10, il existe maintenant une meilleure façon :

screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty

Réponse originale :

Après un certain temps, j'ai trouvé la manière suivante d'obtenir un shell de la machine virtuelle créée par HyperKit :

Exécutez depuis le terminal :

screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty

Vous verrez un écran vide, puis appuyez sur entrée, vous aurez une invite de login. Connectez-vous en tant que root et appuyez sur entrée, vous obtiendrez un shell (pas de mot de passe), vous obtiendrez un shell :

image description ici

Pour quitter la session, tapez Ctrl-A k (puis y pour confirmer).

Cela peut sembler un peu bidouille, mais ça semble fonctionner pour le moment (Sep 2016) (Sep 2017).

1 votes

C'est totalement cassé pour moi. Je peux me connecter, mais quelque chose ne va pas profondément avec les réglages de TERM ou la manière dont les données sont acheminées. J'obtiens une session de terminal non fonctionnelle qui perd des données et n'est pas formatée correctement. J'essaie d'autres moyens pour peut-être réinitialiser la session, mais jusqu'à présent, c'est un échec.

0 votes

Pour moi, cela fonctionne toujours (fév-2017 1.13.0-beta39 en utilisant l'émulateur de terminal iterm2)

1 votes

Ils ont besoin d'un meilleur guide pour cela. J'ai pu suivre vos instructions et accéder à la machine virtuelle. Dans mon cas, après avoir appuyé sur Enter la première fois, cela m'a simplement amené à un sh invite pour la VM. Lorsque j'ai exécuté ls -l sur ce chemin de tty, il s'est avéré qu'il y avait un lien vers lui à /dev/ttys001, ce qui est beaucoup plus facile à taper.

46voto

ru10 Points 380

Mac OS High Sierra Version de Docker 18.06.0-ce-mac70 (26399)

écran ~/Bibliothèque/Containers/com.docker.docker/Data/vms/0/tty

au lieu de

écran ~/Bibliothèque/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty

4 votes

Merci pour le chemin mis à jour. La réponse acceptée doit être mise à jour avec cela.

0 votes

Hmmm... J'obtiens l'erreur "Impossible d'exécuter ~/Library/Containers/com.docker.docker/Data/vms/0/tty Permission denied" à la place sur MacOs Catalina et DFD v2.3.0.4

0 votes

26voto

augurar Points 547

Selon ce commentaire de problème GitHub par un mainteneur de Docker, la façon recommandée d'accéder à la machine virtuelle est par le biais d'un conteneur Docker privilégié.

Essayez de vous connecter à la machine virtuelle : (je recommande cela au lieu d'utiliser screen sur la TTY)

$ docker run -it --privileged --pid=host justincormack/nsenter1

1voto

Athalas Points 11

En fait, la réponse de augurar est la seule qui fonctionne en 2021 comme le dit smammy, les autres options sont obsolètes.

Donc:

$ docker run -it --privileged --pid=host justincormack/nsenter1

était la bonne réponse et a fonctionné pour moi sur MacOS Big Sur en juillet 2021.

1voto

Eliyahu Machluf Points 754

Je utilise docker desktop 4.7.1 sur Mac. Comme mentionné, certaines des bonnes solutions proposées ci-dessus ne fonctionnent pas sur la nouvelle version de docker desktop (le lien tty a disparu).

J'ai préféré la solution de Smammy qui ne nécessite pas d'utiliser une image d'un éditeur non vérifié (image : justincormack/nsenter1, bien que l'image vienne d'un mainteneur docker et que le dépôt ait beaucoup d'étoiles), surtout lorsqu'il est nécessaire d'exécuter docker avec l'option '--privileged' qui accorde à docker un accès complet à la machine hôte.

Cela a fonctionné pour moi (en utilisant l'image busybox, qui contient l'utilitaire nsenter) :

docker run -it --rm --privileged --pid=host busybox nsenter -t1 -m -u -i -n

Vous pouvez trouver une explication de la commande sur
https://www.bretfisher.com/docker-for-mac-commands-for-getting-into-local-docker-vm/ (et une suggestion similaire, en utilisant l'image debian à la place de busybox)

Une autre solution proposée là-bas (mais moins pratique, car elle n'a pas d'auto-complétion) est d'utiliser netcat

nc -U ~/Library/Containers/com.docker.docker/Data/debug-shell.sock

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X