Мені потрібно запустити два різні процеси на контейнері докера, для якого потрібні два термінали. Який найкращий спосіб цього досягти?
Мені потрібно запустити два різні процеси на контейнері докера, для якого потрібні два термінали. Який найкращий спосіб цього досягти?
Відповіді:
Ви можете запускати 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_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>:~$