Мені потрібно запустити два різні процеси на контейнері докера, для якого потрібні два термінали. Який найкращий спосіб цього досягти?
Мені потрібно запустити два різні процеси на контейнері докера, для якого потрібні два термінали. Який найкращий спосіб цього досягти?
Відповіді:
Ви можете запускати docker exec -it <container> bashз декількох терміналів, щоб запустити кілька сеансів, підключених до одного контейнера.
Щоб розширити чудову відповідь @eltonStoneman (Для всіх цих нових людей, як я):
Відкрийте термінал докера
Зробіть зображення запущеним як контейнер у фоновому режимі: docker run -d -it <image_id>
docker ps покаже ідентифікатор container_id, який ви щойно запустили із згаданого зображення.Порада @ eltonStoneman: docker exec -it <container_id> bash
Відкрийте інший термінал докера та виконайте крок 3, щоб створити інший інтерактивний термінал для контейнера. (Промити та повторити)
docker psтрохи. До речі, принаймні в Linux, нормальний термінал чудовий (не повинен бути "докер-терміналом")
ps auxбудь-який з терміналів, я бачу всі, які я запустив.
docker run -it container_name bashзапускає новий контейнер з bash promt.
docker exec -it container_name bashприєднується до вже запущеного запиту bash контейнера .
Якщо ви можете запустити Kitematic - ви можете натиснути на кнопку exec, щоб відкрити термінал у вибраному контейнері.

Використання Docker Compose : Скажімо, у вас є yml Compose, який дозволяє X-Windows.
Ви можете виконати наведені нижче дії, щоб запустити термінали для графічної 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_xenialdocker-compose -f compose-dev-linux.yml up -d dev_ubuntu_xenialdocker psdocker exec -it <CONTAINER ID> bashuser@linuxkit-<generatedid>:~$ qtcreatorЗапуск: - новий термінал Powershell
docker exec -it <CONTAINER ID> bashnautilusЗапуск: - новий термінал Powershell
docker exec -it <CONTAINER ID> bashuser@linuxkit-<generatedid>:~$