【发布时间】:2019-02-14 03:58:03
【问题描述】:
我需要在需要两个终端的 docker 容器上启动两个不同的进程。实现此目的的最佳方法是什么?
【问题讨论】:
标签: docker
我需要在需要两个终端的 docker 容器上启动两个不同的进程。实现此目的的最佳方法是什么?
【问题讨论】:
标签: docker
您可以从多个终端运行docker exec -it <container> bash 以启动连接到同一容器的多个会话。
【讨论】:
扩展@eltonStoneman 的最佳答案(对于所有像我这样的新码头工人):
打开 docker 终端
让图像作为容器在后台运行:docker run -d -it <image_id>
docker ps 将显示您刚刚从所述图像中启动的 container_id。
根据@eltonStoneman 的建议:docker exec -it <container_id> bash
打开另一个 docker 终端并执行步骤 3 以创建另一个与容器交互的终端。 (冲洗并重复)
【讨论】:
docker ps 位。顺便说一句,至少在 Linux 上,一个普通的终端就可以了(不需要是“docker终端”)
ps aux,我会看到我启动的所有终端。
docker run -it container_name bash 使用 bash 提示启动一个新容器。
docker exec -it container_name bash 加入已经在运行容器的 bash 提示符。
【讨论】:
首先获取容器的名称
docker container ls
然后运行 docker exec 命令进入该容器
docker exec <container_id> bash
【讨论】:
使用 Docker Compose:假设您有一个启用 X-Windows 的 Compose yml。
您可以按照以下步骤启动图形 IDE(例如 qtCreator)、nautilus 和终端窗口的终端。
假设:
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 终端
docker-compose -f compose-dev-linux.yml build dev_ubuntu_xenial
docker-compose -f compose-dev-linux.yml up -d dev_ubuntu_xenial
docker ps
docker exec -it <CONTAINER ID> bash
user@linuxkit-<generatedid>:~$ qtcreator
运行: - 新的 Powershell 终端
docker exec -it <CONTAINER ID> bash
nautilus
运行: - 新的 Powershell 终端
docker exec -it <CONTAINER ID> bash
user@linuxkit-<generatedid>:~$
【讨论】:
如果您能够运行 Kitematic - 您可以点击 exec 按钮在所选容器中打开终端。
【讨论】: