it-roy-ru.com

Как открыть несколько терминалов в докере?

Мне нужно запустить два отдельных процесса в док-контейнере, который требует двух терминалов. Каков наилучший способ добиться этого?

46
Atlantic0

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

91
Elton Stoneman

Подробно о @eltonStoneman - отличный ответ (для всех этих новых людей в докере, как я):

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

  2. Получите изображение, работающее как контейнер в фоновом режиме: docker run -d -it <image_id>

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

    • Теперь ваш док-терминал показывает интерактивный терминал для контейнера.
  4. Откройте другой док-терминал и выполните шаг 3, чтобы создать еще один интерактивный терминал для контейнера. (Промыть и повторить)

16
isaacdre

Если вы можете запустить Kitematic - вы можете нажать на кнопку exec , чтобы открыть терминал в выбранном контейнере.

1
VladoDemcak

docker run -it container_name bash запускается новый контейнер с приглашением bash.

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

0
Nerijus Gedrimas

Сначала получите имя контейнера docker container ls Затем получите команду run docker exec, чтобы войти в этот контейнер docker exec <container_id> bash

0
gsumk

Использование Docker Compose : Допустим, у вас есть Compose yml, который включает X-Windows. 

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

Допущения: 

  • Хост Windows 10. 1803
  • Изображение Ubuntu Xenial
  • Двигатель докера 18.03.1-ц
  • 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 <[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: - начальный терминал 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: [email protected]<generatedid>:~$ qtcreator

Run: - новый терминал Powershell

  1. Запустить контейнер: docker exec -it <CONTAINER ID> bash
  2. Запустите nautilus: nautilus

Run: - новый терминал Powershell

  1. Запустить контейнер: docker exec -it <CONTAINER ID> bash
  2. Запустить терминал: [email protected]<generatedid>:~$
0
Trev