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

wztqucjr  于 2023-01-12  发布在  Docker
关注(0)|答案(8)|浏览(529)

我需要在一个需要两个码头的码头集装箱上启动两个不同的流程。实现这一点的最佳方法是什么?

x3naxklr

x3naxklr1#

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

pxiryf3j

pxiryf3j2#

进一步扩展@eltonStoneman的伟大回答(对于所有像我这样的新 Docker ):
1.打开Docker终端
1.让图像作为容器在后台运行:一月一日

    • 提示:***docker ps**将显示您刚刚从所述映像启动的container_id。
  1. Per @eltonStoneman的建议:一米二米一x
    • 现在,您的码头终端向集装箱显示一个交互式终端。*

1.打开另一个终端并执行第3步,以创建另一个与容器交互的终端。(冲洗并重复)

cngwdvgl

cngwdvgl3#

docker run -it container_name bash使用bash提示启动新容器
docker exec -it container_name bash连接已运行容器的bash提示符。

svujldwt

svujldwt4#

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

xxb16uws

xxb16uws5#

使用Docker合成:假设您有一个启用X-Windows的合成yml。
您可以按照以下步骤为图形IDE(例如qtCreator)、nautilus和终端窗口启动终端。

  • 假设:*
  • 主机为Windows 10。1803
  • 图片为Ubuntu Xenial
  • Docker引擎为18.03.1-ce
  • Docker组合为1.21.1
  • Windows Xming X服务器位于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
  • 编写.yml:* 编写-开发-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
1.发射对接器分离:docker-compose -f compose-dev-linux.yml up -d dev_ubuntu_xenial
1.列出容器:docker ps
1.发射容器:docker exec -it <CONTAINER ID> bash
1.启动qtCreator:user@linuxkit-<generatedid>:~$ qtcreator

  • 运行:* -新的Powershell终端

1.发射容器:docker exec -it <CONTAINER ID> bash
1.发射鹦鹉螺号:nautilus

  • 运行:* -新的Powershell终端

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

e37o9pze

e37o9pze6#

首先,我输入以下命令:

docker exec -it <containerName> bash

但是docker说这个容器不存在......之后我用containerID替换了containerName,这个技巧对我很有效;
如果您想知道每个容器ID,请运行以下命令:

sudo docker ps

在那之后运行这个命令打开新的终端到你的容器:

docker exec -it <containerID> bash

干杯!

q8l4jmvw

q8l4jmvw7#

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

h4cxqtbf

h4cxqtbf8#

我在终端中启动了一个容器(-i交互式,-t TTY):

docker run -i -t <IMAGE_URL> /bin/bash

我的命令提示符现在以root@484ded1212aa:/开头,其中484ded1212aaCONTAINER ID。在另一个选项卡(或窗口)中,我使用了该ID:

docker exec -i -t 484ded1212aa /bin/bash

现在两个终端选项卡都以root@484ded1212aa:/开头,第二个选项卡包含我在第一个终端中克隆的Git repo(在上面两个命令之间)。这很有用,因为我想在一个选项卡中交互式地更改代码,然后在另一个选项卡中运行它
获取CONTAINER_IDNAMES的另一种方法是使用以下命令:

docker container ls

它给出了:

CONTAINER ID        IMAGE                                            COMMAND             CREATED             STATUS              PORTS               NAMES
484ded1212aa        registry.gitlab.com/molcas/dockerfiles/gcc-4.8   "/bin/bash"         2 hours ago         Up 2 hours                              hardcore_einstein

注意,尽管在两个选项卡中打开了一个容器,但仍然只有一个容器。

相关问题