Ich muss zwei unterschiedliche Prozesse auf einem Docker-Container starten, für den zwei Terminals erforderlich sind. Wie kann dies am besten erreicht werden?
Antworten:
Sie können docker exec -it <container> bash
von mehreren Terminals aus ausführen , um mehrere Sitzungen zu starten, die mit demselben Container verbunden sind.
Um die großartige Antwort von @eltonStoneman zu erweitern (Für all diese neuen Docker-Leute wie mich):
Öffnen Sie ein Docker-Terminal
Lassen Sie das Bild als Container im Hintergrund laufen: docker run -d -it <image_id>
docker ps
Per @ eltonStonemans Rat: docker exec -it <container_id> bash
Öffnen Sie ein anderes Docker-Terminal und führen Sie Schritt 3 aus, um ein weiteres interaktives Terminal für den Container zu erstellen. (Spülen und wiederholen)
docker ps
bisschen. Übrigens, zumindest unter Linux, ist ein normales Terminal in Ordnung (muss kein "Docker-Terminal" sein)
ps aux
in einem der Terminals ausgeführt werde, werden alle von mir gestarteten Terminals angezeigt.
docker run -it container_name bash
startet einen neuen Container mit bash promt.
docker exec -it container_name bash
tritt der bereits ausgeführten Bash-Eingabeaufforderung des Containers bei .
Wenn Sie Kitematic ausführen können , können Sie auf die Schaltfläche exec klicken , um das Terminal im ausgewählten Container zu öffnen.
Verwenden von Docker Compose : Angenommen, Sie haben ein Compose-XML, das X-Windows aktiviert.
Sie können die folgenden Schritte ausführen, um Terminals für eine grafische IDE (z. B. qtCreator), Nautilus und ein Terminalfenster zu starten.
Annahmen:
Dockerfile: Dockerfile-dev-ubuntu_xenial - erstellt das Docker-Image
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
Ausführen: - anfängliches Powershell-Terminal
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
Führen Sie Folgendes aus : - Neues Powershell-Terminal
docker exec -it <CONTAINER ID> bash
nautilus
Führen Sie Folgendes aus : - Neues Powershell-Terminal
docker exec -it <CONTAINER ID> bash
user@linuxkit-<generatedid>:~$