如何在Docker中打开多个终端?


Answers:


143

您可以docker exec -it <container> bash从多个终端运行以启动连接到同一容器的多个会话。


感谢您的出色回答。如果我现在想打开我启动并在后台运行并杀死它的以前的交互式终端之一,该怎么办?使用docker ps仅显示容器,但是如果我在任何终端中运行ps aux,我都会看到我启动的所有终端。
Matteo

26

扩展@eltonStoneman的好答案(对于所有像我这样的新docker员工):

  1. 打开一个码头

  2. 使图像作为容器在后台运行: docker run -d -it <image_id>

    • 提示: 将显示您刚刚从上述图片启动的container_id。docker ps
  3. 根据@eltonStoneman的建议: docker exec -it <container_id> bash

    • 现在,您的Docker终端正在向容器显示一个交互式终端。
  4. 打开另一个docker终端,然后执行步骤3,为该容器创建另一个交互式终端。(重复冲洗)


2
谢谢,尤其是docker ps一点。顺便说一句,至少在Linux上,可以使用普通终端(不需要是“ docker终端”)
Darren Cook

感谢您的出色回答。如果我现在想打开我启动并在后台运行并杀死它的以前的交互式终端之一,该怎么办?使用docker ps仅显示容器,但是如果我ps aux在任何终端中运行,我都会看到我启动的所有终端。
Matteo

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:假设您有一个启用X-Windows的Compose yml。

您可以按照以下步骤启动图形IDE(例如qtCreator),nautilus和终端窗口的终端。

假设:

  • 主机是Windows10。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

运行: -新的Powershell终端

  1. 发射容器: docker exec -it <CONTAINER ID> bash
  2. 启动终端: user@linuxkit-<generatedid>:~$

0

首先获取容器的名称, docker container ls 然后获取运行docker exec命令以获取该容器 docker exec <container_id> bash

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.