J'ai besoin de lancer deux processus distincts sur un conteneur Docker qui nécessite deux terminaux. Quel est le meilleur moyen d'y parvenir?
Vous pouvez exécuter docker exec -it <container> bash
à partir de plusieurs terminaux pour lancer plusieurs sessions connectées au même conteneur.
Pour développer la réponse géniale de @ eltonStoneman ((pour tous ces nouveaux dockers comme moi):
Ouvrir un terminal de docker
Obtenez l'image s'exécutant comme un conteneur en arrière-plan: docker run -d -it <image_id>
docker ps
_ montrera le conteneur_id que vous venez de lancer depuis cette image.Le conseil de Per @ eltonStoneman: docker exec -it <container_id> bash
Ouvrez un autre terminal fixe et effectuez l'étape 3 pour créer un autre terminal interactif pour le conteneur. (Rincer et répéter)
Si vous pouvez exécuter Kitematic -, vous pouvez cliquer sur le bouton exec pour ouvrir le terminal dans le conteneur sélectionné.
docker run -it container_name bash
démarre un nouveau conteneur avec invite bash.
docker exec -it container_name bash
rejoint l'invite déjà en cours d'exécution du conteneur bash.
Commencez par obtenir le nom du conteneur docker container ls
Ensuite, obtenez la commande run docker exec pour obtenir ce conteneur docker exec <container_id> bash
Utilisation de Docker Compose : Supposons que vous avez un Compose yml qui active X-Windows.
Vous pouvez suivre les étapes ci-dessous pour lancer des terminaux pour un graphique IDE (par exemple, qtCreator), nautilus et une fenêtre de terminal.
Hypothèses:
Dockerfile: Dockerfile-dev-ubuntu_xenial - crée l'image Docker
FROM ubuntu:xenial
ARG DEBIAN_FRONTEND=noninteractive
LABEL maintainer "Your NAME <[email protected]>"
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
Run: - terminal initial de 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
Run: - nouveau terminal Powershell
docker exec -it <CONTAINER ID> bash
nautilus
Run: - nouveau terminal Powershell
docker exec -it <CONTAINER ID> bash
user@linuxkit-<generatedid>:~$