Як відкрити кілька терміналів у Docker?


77

Мені потрібно запустити два різні процеси на контейнері докера, для якого потрібні два термінали. Який найкращий спосіб цього досягти?


Відповіді:


144

Ви можете запускати docker exec -it <container> bashз декількох терміналів, щоб запустити кілька сеансів, підключених до одного контейнера.


Дякую за чудову відповідь. Що робити, якщо я зараз хочу відкрити один із попередніх інтерактивних терміналів, який я запустив і залишив працювати у фоновому режимі, і вбити його? Використання docker ps показує лише контейнер, але якщо я запускаю ps aux у будь-якому з терміналів, я бачу всі, які я запустив.
Маттео

26

Щоб розширити чудову відповідь @eltonStoneman (Для всіх цих нових людей, як я):

  1. Відкрийте термінал докера

  2. Зробіть зображення запущеним як контейнер у фоновому режимі: docker run -d -it <image_id>

    • Порада: docker ps покаже ідентифікатор container_id, який ви щойно запустили із згаданого зображення.
  3. Порада @ eltonStoneman: docker exec -it <container_id> bash

    • Тепер ваш термінал докера показує інтерактивний термінал контейнеру.
  4. Відкрийте інший термінал докера та виконайте крок 3, щоб створити інший інтерактивний термінал для контейнера. (Промити та повторити)


2
Дякую, особливо за docker psтрохи. До речі, принаймні в Linux, нормальний термінал чудовий (не повинен бути "докер-терміналом")
Даррен Кук,

Дякую за чудову відповідь. Що робити, якщо я зараз хочу відкрити один із попередніх інтерактивних терміналів, який я запустив і залишив працювати у фоновому режимі, і вбити його? Використання docker ps показує лише контейнер, але якщо я запустив ps auxбудь-який з терміналів, я бачу всі, які я запустив.
Маттео

5

docker run -it container_name bashзапускає новий контейнер з bash promt.

docker exec -it container_name bashприєднується до вже запущеного запиту bash контейнера .


1

Якщо ви можете запустити Kitematic - ви можете натиснути на кнопку exec, щоб відкрити термінал у вибраному контейнері.


8
У нього була одна проблема, тепер у нього дві. (запустити kitematic, а потім відкрити новий термінал)
SparK

@SparK справді. Kitematic тепер застарілий
VladoDemcak

0

Використання Docker Compose : Скажімо, у вас є yml Compose, який дозволяє X-Windows.

Ви можете виконати наведені нижче дії, щоб запустити термінали для графічної IDE (наприклад, qtCreator), nautilus та вікна терміналу.

Припущення:

  • Хост - Windows 10. 1803
  • Зображення Ubuntu Xenial
  • Двигун Docker - 18.03.1-ce
  • Docker Compose - це 1.21.1
  • Windows Xming X Server - 7.7.0.25 - з використанням інтерфейсу IPv4 192.168.1.101

Dockerfile: Dockerfile-dev-ubuntu_xenial - створює образ 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

Запуск: - початковий термінал Powershell

  1. Збірка зображення: docker-compose -f compose-dev-linux.yml build dev_ubuntu_xenial
  2. Запуск Docker відокремлений: docker-compose -f compose-dev-linux.yml up -d dev_ubuntu_xenial
  3. Контейнер (и) списку: docker ps
  4. Контейнер для запуску: docker exec -it <CONTAINER ID> bash
  5. Запуск qtCreator: user@linuxkit-<generatedid>:~$ qtcreator

Запуск: - новий термінал Powershell

  1. Контейнер для запуску: docker exec -it <CONTAINER ID> bash
  2. Запуск nautilus: nautilus

Запуск: - новий термінал Powershell

  1. Контейнер для запуску: docker exec -it <CONTAINER ID> bash
  2. Пусковий термінал: user@linuxkit-<generatedid>:~$

0

Спочатку отримайте ім'я контейнера docker container ls Потім отримайте команду run docker exec, щоб потрапити в цей контейнер docker exec <container_id> bash

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.