Android

Verbinding maken met een docker-container

Docker Containers & Java: What I Wish I Had Been Told

Docker Containers & Java: What I Wish I Had Been Told

Inhoudsopgave:

Anonim

Verbinding maken met een actieve Docker-container is handig als u wilt zien wat er in de container gebeurt. Als de Docker-container niet werkt zoals verwacht, kunt u deze aan de container bevestigen of een shell aan de container toevoegen en opdrachten uitvoeren zoals ps of top . U kunt ook de container invoeren, nieuwe pakketten installeren en er een nieuwe Docker-afbeelding van maken.

In deze zelfstudie leggen we uit hoe u een koppeling maakt met het hoofdproces van de container en hoe u een shell naar een actieve container kunt krijgen.

Bevestig aan een container

Hoewel het mogelijk is om meerdere processen in een container uit te voeren, voeren de meeste docker-containers slechts één proces uit. De opdracht die wordt uitgevoerd bij het starten van een container wordt gespecificeerd met behulp van de ENTRYPOINT en / of RUN .

Met docker attach opdracht docker attach kunt u uw terminal koppelen aan de actieve container. Dit is handig als u in realtime wilt zien wat er in de standaarduitvoer is geschreven of als u het proces interactief wilt regelen.

Laten we een nieuwe, vrijstaande Nginx-container uitvoeren met behulp van de officiële Nginx-afbeelding om beter te begrijpen hoe de opdracht attach werkt.

docker container run --name my_nginx -d -p 8080:80 nginx

De optie -p 8080:80 vertelt Docker om poort 8080 van de container te binden aan poort 80 op de hostmachine.

Maak een lijst van de containers om te controleren of de container "my_nginx" actief is:

docker container ls

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8e1c4974a8d8 nginx "nginx -g 'daemon of…" 3 minutes ago Up 2 seconds 0.0.0.0:8080->80/tcp my_nginx

Bevestig de container met de ID of naam van de container:

docker container attach my_nginx

De standaardopdracht van de nginx-afbeelding die wordt uitgevoerd wanneer u de container uitvoert, is ingesteld op CMD . Wanneer u de opdracht attach uitvoert, attach uw terminal zich aan het nginx proces.

Open 127.0.0.1:8080 in uw browser en u kunt de uitvoer van het nginx-proces in realtime bekijken.

192.168.33.1 - - "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36" "-" 192.168.33.1 - - "GET /favicon.ico HTTP/1.1" 404 555 "http://192.168.33.71:8080/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36" "-"

Om toegang te krijgen tot de containerlogboeken, gebruikt u liever de opdracht docker logs .

Gebruik de CTRL-p CTRL-q om de container los te maken zonder deze te stoppen. Als u op CTRL-c drukt, wordt de container gestopt.

Als de lopende processen waaraan u koppelt, invoer accepteert, kunt u er instructies naartoe sturen.

Breng een shell naar een container

Met de opdracht docker exec kunt u opdrachten uitvoeren in een actieve container.

Start eerst een nieuwe container om te zien hoe de opdracht exec werkt en hoe deze kan worden gebruikt om de shell van de container in te voeren. We zullen de officiële MySQL-afbeelding gebruiken:

docker container run --name my_mysql -d mysql

Hiermee maakt u een container met de naam "my_mysql".

Om een ​​opdracht in de container uit te voeren, voert u de volgende opdracht uit:

docker container exec -it my_mysql ls /var

De optie -i staat voor interactief en -t vertelt Docker om een ​​pseudo TTY-apparaat toe te wijzen. Met het commando ls worden alle bestanden en mappen in de map /var container weergegeven:

backups cache lib local lock log mail opt run spool tmp

Om een ​​shell in de container te krijgen, dwz om in de container te komen, start u een nieuwe shellsessie door de shell-binary uit te voeren. U kunt sh , bash of elke andere shell gebruiken die in de afbeelding is opgenomen.

De onderstaande opdracht maakt een nieuwe Bash-sessie in de container:

docker container exec -it my_mysql /bin/bash

Uw opdrachtprompt zal veranderen, wat aangeeft dat u nu aan de containerschaal werkt.

Vanaf hier kunt u opdrachten op dezelfde manier uitvoeren als op elke andere Linux-server. Als u bijvoorbeeld een lijst wilt krijgen van de huidige omgevingsvariabelen, typt u env :

env

De uitvoer ziet er ongeveer zo uit:

HOSTNAME=e0214d97e0fe MYSQL_ROOT_PASSWORD=my-secret-pw PWD=/ HOME=/root MYSQL_MAJOR=8.0 GOSU_VERSION=1.7 MYSQL_VERSION=8.0.17-1debian9 TERM=xterm SHLVL=1 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin _=/usr/bin/env

Conclusie

Met de docker exec en docker attach commando's kunt u verbinding maken met een actieve container. Om een ​​interactieve shell in een container te krijgen, gebruikt u de opdracht exec om een ​​nieuwe shell-sessie te starten. Met het commando hecht u uw terminal aan een actieve container.

havenarbeider