【问题标题】:How to open multiple terminals in docker?如何在docker中打开多个终端?
【发布时间】:2019-02-14 03:58:03
【问题描述】:

我需要在需要两个终端的 docker 容器上启动两个不同的进程。实现此目的的最佳方法是什么?

【问题讨论】:

标签: docker


【解决方案1】:

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

【讨论】:

  • 感谢您的出色回答。如果我现在想打开之前启动并在后台运行的交互式终端之一并杀死它怎么办?使用 docker ps 只显示容器,但如果我在任何终端中运行 ps aux ,我会看到我启动的所有终端。
  • 你知道有没有办法在 Dockerfile 中做到这一点?
【解决方案2】:

扩展@eltonStoneman 的最佳答案(对于所有像我这样的新码头工人):

  1. 打开 docker 终端

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

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

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

【讨论】:

  • 谢谢,尤其是docker ps 位。顺便说一句,至少在 Linux 上,一个普通的终端就可以了(不需要是“docker终端”)
  • 感谢您的出色回答。如果我现在想打开之前启动并在后台运行的交互式终端之一并杀死它怎么办?使用 docker ps 只显示容器,但如果我在任何终端中运行ps aux,我会看到我启动的所有终端。
【解决方案3】:

docker run -it container_name bash 使用 bash 提示启动一个新容器

docker exec -it container_name bash 加入已经在运行容器的 bash 提示符。

【讨论】:

    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      使用 Docker Compose:假设您有一个启用 X-Windows 的 Compose yml。

      您可以按照以下步骤启动图形 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 &lt;CONTAINER ID&gt; bash
      5. 启动qtCreator:user@linuxkit-&lt;generatedid&gt;:~$ qtcreator

      运行: - 新的 Powershell 终端

      1. 启动容器:docker exec -it &lt;CONTAINER ID&gt; bash
      2. 启动鹦鹉螺:nautilus

      运行: - 新的 Powershell 终端

      1. 启动容器:docker exec -it &lt;CONTAINER ID&gt; bash
      2. 启动终端:user@linuxkit-&lt;generatedid&gt;:~$

      【讨论】:

        【解决方案6】:

        如果您能够运行 Kitematic - 您可以点击 exec 按钮在所选容器中打开终端。

        【讨论】:

        • 他有一个问题,现在他有两个。 (运行风筝,然后打开一个新的终端)
        • @SparK 确实如此。 Kitematic 现在是旧版
        猜你喜欢
        • 2020-01-25
        • 2017-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多