110 votes

Comment ouvrir plusieurs terminaux dans Docker ?

Je dois lancer deux processus distincts sur un conteneur Docker, ce qui nécessite deux terminaux. Quelle est la meilleure façon d'y parvenir ?

191voto

Elton Stoneman Points 7918

Vous pouvez exécuter docker exec -it <container> bash à partir de plusieurs terminaux pour lancer plusieurs sessions connectées au même conteneur.

0 votes

Merci pour cette excellente réponse. Que se passe-t-il si je veux maintenant ouvrir l'un des terminaux interactifs précédents que j'ai lancé et laissé tourner en arrière-plan et le tuer ? L'utilisation de docker ps ne montre que le conteneur, mais si j'exécute ps aux dans l'un des terminaux, je vois tous ceux que j'ai lancés.

0 votes

Savez-vous s'il existe un moyen de faire cela à l'intérieur d'un Dockerfile ?

35voto

isaacdre Points 406

Pour développer @eltonStoneman La réponse de l'auteur est excellente (pour tous les nouveaux utilisateurs de Docker comme moi) :

  1. Ouvrez un terminal docker

  2. Faites fonctionner l'image comme un conteneur en arrière-plan : docker run -d -it <image_id>

    • Conseil : docker ps affichera le container_id que vous venez de lancer à partir de ladite image.
  3. Selon les conseils de @eltonStoneman : docker exec -it <container_id> bash

    • Maintenant votre terminal docker montre un terminal interactif au conteneur.
  4. Ouvrez un autre terminal docker et effectuez l'étape 3 pour créer un autre terminal interactif vers le conteneur. (Rincer et répéter)

2 votes

Merci, surtout pour le docker ps bit. Par ailleurs, au moins sous Linux, un terminal normal est suffisant (il n'est pas nécessaire que ce soit un "terminal docker").

0 votes

Merci pour cette excellente réponse. Que se passe-t-il si je veux maintenant ouvrir l'un des terminaux interactifs précédents que j'ai lancé et laissé tourner en arrière-plan et le tuer ? L'utilisation de docker ps ne montre que le conteneur, mais si j'exécute ps aux dans n'importe quel terminal, je vois tous ceux que j'ai lancés.

10voto

userN Points 115

docker run -it container_name bash commence un nouveau conteneur avec bash promt.

docker exec -it container_name bash rejoint du conteneur en cours d'exécution l'invite bash.

1voto

Trev Points 26

Utilisation de Docker Compose : Disons que vous avez un yml Compose qui active X-Windows.

Vous pouvez suivre les étapes ci-dessous pour lancer les terminaux d'un IDE graphique (par exemple, qtCreator), nautilus et une fenêtre de terminal.

Hypothèses :

  • L'hôte est Windows 10. 1803
  • L'image est Ubuntu Xenial
  • Le moteur Docker est 18.03.1-ce
  • Docker Compose est 1.21.1
  • Le serveur Xming de Windows est 7.7.0.25 - utilisant l'interface IPv4 192.168.1.101

Dockerfile : Dockerfile-dev-ubuntu_xenial - crée l'image Docker

FROM ubuntu:xenial
ARG DEBIAN_FRONTEND=noninteractive
LABEL maintainer "Your NAME <your.address@yourmailhost.com>"
RUN apt-get update ; apt-get install -y apt-utils desktop-file-utils dialog nautilus build-essential debhelper fakeroot ccache lsb-release
RUN apt-get install -y autotools-dev autoconf pkg-config libtool curl gedit git wget unzip lintian
RUN apt-get install -y qtcreator valgrind
RUN apt-get install -y sudo \
    && groupadd -r user -g 1000 \
    && useradd -u 1000 -r -g user -m -d /user -s /sbin/nologin -c "Build pkg user" user \
    && chmod 755 /user \
    && echo "user ALL=(root) NOPASSWD:ALL" > /etc/sudoers.d/user \
    && chmod 0440 /etc/sudoers.d/user
WORKDIR /user
USER user
VOLUME ["/buildpkg", "/user/projects", "/user/resources"]
CMD /bin/bash

Compose.yml : compose-dev-linux.yml

version: '3'
services:
  # Commands:
  #   Build: docker-compose -f compose-dev-linux.yml build dev_ubuntu_xenial
  #   Up   : docker-compose -f compose-dev-linux.yml up -d dev_ubuntu_xenial
  #   Run  : docker-compose -f compose-dev-linux.yml run dev_ubuntu_xenial
  #   Down : docker-compose -f compose-dev-linux.yml down
  # Host folders:
  #   %USERPROFILE%/Projects
  #   %USERPROFILE%/Projects/Docker-builds
  #   %USERPROFILE%/Projects/Docker-resources
  # Docker configuration file locations:
  #   %USERPROFILE%/Dockerfiles/Dockerfile-dev-ubuntu_xenial
  #   %USERPROFILE%/compose-dev-linux.yml
  dev_ubuntu_xenial:
    security_opt:
      - seccomp:unconfined
    cap_add:
      - SYS_ADMIN
    environment:
      - DISPLAY=192.168.1.101:0
    network_mode: host
    image: "application-dev-platform/application:ubuntu_xenial"
    container_name: application-dev-ubuntu_xenial
    command: bash -c "/bin/bash"
    tty: true
    build:
      context: ./Dockerfiles
      dockerfile: Dockerfile-dev-ubuntu_xenial
    volumes:
      - ./Projects:/user/projects
      - ./Projects/Docker-builds:/buildpkg
      - ./Projects/Docker-resources:/user/resources

Cours : - terminal initial Powershell

  1. Image de construction : docker-compose -f compose-dev-linux.yml build dev_ubuntu_xenial
  2. Lancez Docker détaché : docker-compose -f compose-dev-linux.yml up -d dev_ubuntu_xenial
  3. Lister le(s) conteneur(s) : docker ps
  4. Conteneur de lancement : docker exec -it <CONTAINER ID> bash
  5. Lancez qtCreator : user@linuxkit-<generatedid>:~$ qtcreator

Cours : - nouveau terminal Powershell

  1. Conteneur de lancement : docker exec -it <CONTAINER ID> bash
  2. Lancez Nautilus : nautilus

Cours : - nouveau terminal Powershell

  1. Conteneur de lancement : docker exec -it <CONTAINER ID> bash
  2. Terminal de lancement : user@linuxkit-<generatedid>:~$

0voto

VladoDemcak Points 2281

Si vous êtes en mesure d'exécuter Kitematic - vous pouvez cliquer sur exec pour ouvrir le terminal dans le conteneur sélectionné.

8 votes

Il avait un problème, maintenant il en a deux. (lancez kitematic et ouvrez un nouveau terminal)

0 votes

@SparK en effet. Kitematic est maintenant un héritage

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