web-dev-qa-db-fra.com

Comment ouvrir plusieurs terminaux dans docker?

J'ai besoin de lancer deux processus distincts sur un conteneur Docker qui nécessite deux terminaux. Quel est le meilleur moyen d'y parvenir?

46
Atlantic0

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

91
Elton Stoneman

Pour développer la réponse géniale de @ eltonStoneman ((pour tous ces nouveaux dockers comme moi):

  1. Ouvrir un terminal de docker

  2. Obtenez l'image s'exécutant comme un conteneur en arrière-plan: docker run -d -it <image_id>

    • (Astuce:} _ docker ps _ ​​montrera le conteneur_id que vous venez de lancer depuis cette image.
  3. Le conseil de Per @ eltonStoneman: docker exec -it <container_id> bash

    • _ {Votre terminal fixe présente maintenant un terminal interactif au conteneur.
  4. Ouvrez un autre terminal fixe et effectuez l'étape 3 pour créer un autre terminal interactif pour le conteneur. (Rincer et répéter)

16
isaacdre

Si vous pouvez exécuter Kitematic -, vous pouvez cliquer sur le bouton exec pour ouvrir le terminal dans le conteneur sélectionné.

1
VladoDemcak

docker run -it container_name bash démarre un nouveau conteneur avec invite bash.

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

0
Nerijus Gedrimas

Commencez par obtenir le nom du conteneur docker container ls Ensuite, obtenez la commande run docker exec pour obtenir ce conteneur docker exec <container_id> bash

0
gsumk

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

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

Hypothèses: 

  • L'hôte est Windows 10. 1803
  • L'image est Ubuntu Xenial
  • Moteur Docker est 18.03.1-ce
  • Docker Compose est 1.21.1 
  • Windows Xming X Server 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 <[email protected]>"
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

Run: - terminal initial de Powershell

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

Run: - nouveau terminal Powershell

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

Run: - nouveau terminal Powershell

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