Android

Comment se connecter à un conteneur Docker

Docker : l'essentiel en 7 minutes

Docker : l'essentiel en 7 minutes

Table des matières:

Anonim

La connexion à un conteneur Docker en cours d'exécution est utile lorsque vous souhaitez voir ce qui se passe à l'intérieur du conteneur. Si le conteneur Docker ne fonctionne pas comme prévu, vous pouvez l'attacher au conteneur ou obtenir un shell sur le conteneur et exécuter des commandes telles que ps ou top . Vous pouvez également entrer dans le conteneur, installer de nouveaux packages et créer une nouvelle image Docker à partir de celui-ci.

Dans ce tutoriel, nous expliquerons comment se connecter au processus principal d'exécution du conteneur et comment obtenir un shell dans un conteneur en cours d'exécution.

Attacher à un conteneur

Bien qu'il soit possible d'exécuter plusieurs processus dans un conteneur, la plupart des conteneurs Docker n'exécutent qu'un seul processus. La commande exécutée lors du démarrage d'un conteneur est spécifiée à l'aide de l' ENTRYPOINT et / ou RUN .

La commande docker attach vous permet de connecter votre terminal au conteneur en cours d'exécution. Ceci est utile lorsque vous souhaitez voir ce qui est écrit dans la sortie standard en temps réel ou pour contrôler le processus de manière interactive.

Pour mieux comprendre le fonctionnement de la commande attach , exécutons un nouveau conteneur Nginx détaché à l'aide de l'image Nginx officielle.

docker container run --name my_nginx -d -p 8080:80 nginx

L'option -p 8080:80 indique à Docker de lier le port 8080 du conteneur au port 80 sur la machine hôte.

Répertoriez les conteneurs pour vous assurer que le conteneur «my_nginx» est en cours d'exécution:

docker container ls

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8e1c4974a8d8 nginx "nginx -g 'daemon of…" 3 minutes ago Up 2 seconds 0.0.0.0:8080->80/tcp my_nginx

Attachez-le au conteneur en utilisant l'ID ou le nom du conteneur:

docker container attach my_nginx

La commande par défaut de l'image nginx qui est exécutée lorsque vous exécutez le conteneur est définie sur CMD . Lorsque vous exécutez la commande attach votre terminal se attach au processus nginx .

Ouvrez 127.0.0.1:8080 dans votre navigateur et vous pouvez regarder la sortie du processus nginx en temps réel.

192.168.33.1 - - "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36" "-" 192.168.33.1 - - "GET /favicon.ico HTTP/1.1" 404 555 "http://192.168.33.71:8080/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36" "-"

Pour accéder aux journaux du conteneur, vous devriez préférer utiliser la commande docker logs .

Pour détacher du conteneur sans l'arrêter, utilisez la combinaison de CTRL-p CTRL-q . Appuyez sur CTRL-c arrêter le conteneur.

Si le processus en cours auquel vous vous attachez accepte une entrée, vous pouvez lui envoyer des instructions.

Obtenez un shell dans un conteneur

La commande docker exec vous permet d'exécuter des commandes à l'intérieur d'un conteneur en cours d'exécution.

Pour voir comment la commande exec fonctionne et comment elle peut être utilisée pour entrer dans le shell du conteneur, commencez par démarrer un nouveau conteneur. Nous utiliserons l'image MySQL officielle:

docker container run --name my_mysql -d mysql

Cela va créer un conteneur nommé "my_mysql".

Pour exécuter une commande à l'intérieur du conteneur, exécutez la commande suivante:

docker container exec -it my_mysql ls /var

L'option -i signifie interactif et -t indique à Docker d'allouer un pseudo périphérique TTY. La commande ls répertorie tous les fichiers et répertoires dans le répertoire /var du conteneur:

backups cache lib local lock log mail opt run spool tmp

Pour obtenir un shell dans le conteneur, c'est-à-dire pour entrer à l'intérieur du conteneur, démarrez une nouvelle session shell en exécutant le binaire shell. Vous pouvez utiliser sh , bash ou tout autre shell inclus dans l'image.

La commande ci-dessous créera une nouvelle session Bash à l'intérieur du conteneur:

docker container exec -it my_mysql /bin/bash

Votre invite de commande va changer, indiquant que vous travaillez maintenant sur le shell du conteneur.

À partir de là, vous pouvez exécuter des commandes de la même manière que vous le feriez sur n'importe quel autre serveur Linux. Par exemple, pour obtenir une liste des variables d'environnement actuelles, tapez env :

env

La sortie ressemblera à ceci:

HOSTNAME=e0214d97e0fe MYSQL_ROOT_PASSWORD=my-secret-pw PWD=/ HOME=/root MYSQL_MAJOR=8.0 GOSU_VERSION=1.7 MYSQL_VERSION=8.0.17-1debian9 TERM=xterm SHLVL=1 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin _=/usr/bin/env

Conclusion

Les commandes docker exec et docker attach vous permettent de vous connecter à un conteneur en cours d'exécution. Pour obtenir un shell interactif dans un conteneur, utilisez la commande exec pour démarrer une nouvelle session shell. La commande attach attache votre terminal à un conteneur en cours d'exécution.

docker