Docker
Hantera containrar
Sök…
Syntax
- docker rm [OPTIONS] CONTAINER [CONTAINER ...]
- docker bifoga [OPTIONS] CONTAINER
- docker exec [OPTIONS] CONTAINER COMMAND [ARG ...]
- docker ps [OPTIONS]
- dockerloggar [OPTIONS] CONTAINER
- docker inspektera [OPTIONS] CONTAINER | IMAGE [CONTAINER | IMAGE ...]
Anmärkningar
- I exemplen ovan, när container är en parameter i docker-kommandot, nämns den som
<container>
ellercontainer id
eller<CONTAINER_NAME>
. På alla dessa platser kan du antingen skicka ett behållarnamn eller behållar-ID för att ange en behållare.
Lista containrar
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2bc9b1988080 redis "docker-entrypoint.sh" 2 weeks ago Up 2 hours 0.0.0.0:6379->6379/tcp elephant-redis
817879be2230 postgres "/docker-entrypoint.s" 2 weeks ago Up 2 hours 0.0.0.0:65432->5432/tcp pt-postgres
docker ps
på egen hand skriver bara ut för närvarande kör containrar. För att se alla containrar (inklusive stoppade) använder du -a
flaggan:
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9cc69f11a0f7 docker/whalesay "ls /" 26 hours ago Exited (0) 26 hours ago berserk_wozniak
2bc9b1988080 redis "docker-entrypoint.sh" 2 weeks ago Up 2 hours 0.0.0.0:6379->6379/tcp elephant-redis
817879be2230 postgres "/docker-entrypoint.s" 2 weeks ago Up 2 hours 0.0.0.0:65432->5432/tcp pt-postgres
Om du vill lista containrar med en specifik status använder du -f
kommandoradalternativet för att filtrera resultaten. Här är ett exempel på lista alla containrar som har lämnat:
$ docker ps -a -f status=exited
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9cc69f11a0f7 docker/whalesay "ls /" 26 hours ago Exited (0) 26 hours ago
Det är också möjligt att lista bara behållar-ID: er med -q
omkopplaren. Detta gör det mycket enkelt att använda resultatet med andra Unix-verktyg (som grep
och awk
):
$ docker ps -aq
9cc69f11a0f7
2bc9b1988080
817879be2230
När du startar en container med docker run --name mycontainer1
ger du ett specifikt namn och inte ett slumpmässigt namn (i form av mood_famous, till exempel nostalgic_stallman), och det kan vara lätt att hitta dem med ett sådant kommando
docker ps -f name=mycontainer1
Referensbehållare
Docker-kommandon som tar namnet på en behållare accepterar tre olika former:
Typ | Exempel |
---|---|
Full UUID | 9cc69f11a0f76073e87f25cb6eaf0e079fbfbd1bc47c063bcd25ed3722a8cc4a |
Kort UUID | 9cc69f11a0f7 |
namn | berserk_wozniak |
Använd docker ps
att se dessa värden för behållarna på ditt system.
UUID genereras av Docker och kan inte ändras. Du kan tillhandahålla ett namn till behållaren när du startar det docker run --name <given name> <image>
. Docker genererar ett slumpmässigt namn till behållaren om du inte anger något vid start av behållaren.
OBS : Värdet på UUID (eller en "kort" UUID) kan vara vilken längd som helst så länge det givna värdet är unikt för en behållare
Start och stopp av containrar
Så här stoppar du en löpande behållare:
docker stop <container> [<container>...]
Detta skickar huvudprocessen i behållaren en SIGTERM, följt av en SIGKILL om den inte stannar inom graden. Namnet på varje behållare skrivs ut när den slutar.
Så här startar du en behållare som stoppas:
docker start <container> [<container>...]
Detta startar varje behållare som skickas i bakgrunden. namnet på varje behållare skrivs ut när det startar. För att starta behållaren i förgrunden, passera flaggan -a
(- --attach
).
Lista behållare med anpassat format
docker ps --format 'table {{.ID}}\t{{.Names}}\t{{.Status}}'
Hitta en specifik behållare
docker ps --filter name=myapp_1
Hitta behållarens IP
För att ta reda på IP-adressen för din behållare, använd:
docker inspect <container id> | grep IPAddress
eller använd dockerinspektion
docker inspect --format '{{ .NetworkSettings.IPAddress }}' ${CID}
Starta om dockerbehållaren
docker restart <container> [<container>...]
Alternativ - tid : Sekunder att vänta på stopp innan du dödar behållaren (standard 10)
docker restart <container> --time 10
Ta bort, ta bort och rengör behållare
docker rm
kan användas för att ta bort en specifik behållare som denna:
docker rm <container name or id>
För att ta bort alla behållare kan du använda detta uttryck:
docker rm $(docker ps -qa)
Som standard raderar dockaren inte en behållare som körs. Varje behållare som kör producerar ett varningsmeddelande och raderas inte. Alla andra behållare kommer att raderas.
Alternativt kan du använda xargs
:
docker ps -aq -f status=exited | xargs -r docker rm
Där docker ps -aq -f status=exited
kommer att returnera en lista med behållar-ID: er för behållare som har statusen "Avsluten".
Varning: Alla ovanstående exempel tar bara bort "stoppade" behållare.
För att ta bort en behållare, oavsett om den stoppas eller inte, kan du använda kraftflaggan -f
:
docker rm -f <container name or id>
Så här tar du bort alla behållare, oavsett tillstånd:
docker rm -f $(docker ps -qa)
Om du bara vill ta bort behållare med dead
status:
docker rm $(docker ps --all -q -f status=dead)
Om du bara vill ta bort behållare med en status som du har exited
:
docker rm $(docker ps --all -q -f status=exited)
Det här är alla permutationer av filter som används vid listning av containrar .
Om du vill ta bort både oönskade behållare och dinglande bilder som använder utrymme efter version 1.3 använder du följande (liknande Unix-verktyget df
):
$ docker system df
Så här tar du bort alla oanvända data:
$ docker system prune
Kör kommandot på en redan befintlig dockarkontainer
docker exec -it <container id> /bin/bash
Det är vanligt att logga in i en redan körd behållare för att göra några snabbtester eller se vad applikationen gör. Ofta anger det dåliga rutiner för containerbruk på grund av loggar och ändrade filer bör placeras i volymer. Detta exempel tillåter oss att logga in i behållaren. Detta antar att / bin / bash finns i behållaren, det kan vara / bin / sh eller något annat.
docker exec <container id> tar -czvf /tmp/backup.tgz /data
docker cp <container id>:/tmp/backup.tgz .
Detta exempel arkiverar innehållet i datakatalogen i en tjära. Sedan med docker cp
du hämta det.
Behållarloggar
Usage: docker logs [OPTIONS] CONTAINER
Fetch the logs of a container
-f, --follow=false Follow log output
--help=false Print usage
--since= Show logs since timestamp
-t, --timestamps=false Show timestamps
--tail=all Number of lines to show from the end of the logs
Till exempel:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
ff9716dda6cb nginx "nginx -g 'daemon off" 8 days ago Up 22 hours 443/tcp, 0.0.0.0:8080->80/tcp
$ docker logs ff9716dda6cb
xx.xx.xx.xx - - [15/Jul/2016:14:03:44 +0000] "GET /index.html HTTP/1.1" 200 511 "https://google.com" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36"
xx.xx.xx.xx - - [15/Jul/2016:14:03:44 +0000] "GET /index.html HTTP/1.1" 200 511 "https://google.com" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36"
Anslut till en instans som körs som demon
Det finns två sätt att uppnå det, det första och mest kända är följande:
docker attach --sig-proxy=false <container>
Den här bokstavligen fäster din bash till container bash, vilket innebär att om du har ett löpande skript ser du resultatet.
För att lossa, skriv bara: Ctl-P Ctl-Q
Men om du behöver ett mer vänligt sätt och kunna skapa nya bash-inställningar, kör bara följande kommando:
docker exec -it <container> bash
Kopierar fil från / till containrar
från container till värd
docker cp CONTAINER_NAME:PATH_IN_CONTAINER PATH_IN_HOST
från värd till container
docker cp PATH_IN_HOST CONTAINER_NAME:PATH_IN_CONTAINER
Om jag använder jess / transmission från
https://hub.docker.com/r/jess/transmission/builds/bsn7eqxrkzrhxazcuytbmzp/
, filerna i behållaren är i / överföring / nedladdning
och min nuvarande katalog på värden är / home / $ USER / abc, efter
docker cp transmission_id_or_name:/transmission/download .
Jag kommer att ha filerna kopierade till
/home/$USER/abc/transmission/download
du kan inte, med docker cp
kopiera bara en fil, kopierar du katalogträdet och filerna
Ta bort, ta bort och rensa dockervolymerna
Dockervolymer tas inte automatiskt bort när en behållare stoppas. Så här tar du bort tillhörande volymer när du stoppar en behållare:
docker rm -v <container id or name>
Om -v
flaggan inte anges förblir volymen på disken som en "dinglande volym". Så här tar du bort alla dinglande volymer:
docker volume rm $(docker volume ls -qf dangling=true)
docker volume ls -qf dangling=true
filter kommer att returnera en lista med namnen på dockningsvolymer, inklusive otaggade, som inte är kopplade till en behållare.
Alternativt kan du använda xargs
:
docker volume ls -f dangling=true -q | xargs --no-run-if-empty docker volume rm
Exportera och importera Docker-containerfiler
Det är möjligt att spara en Docker-behållares filsysteminnehåll i en tarball-arkivfil. Detta är användbart i en nypa för att flytta containerfilsystem till olika värdar, till exempel om en databasbehållare har viktiga förändringar och det inte annars är möjligt att replikera dessa ändringar någon annanstans. Observera att det är att föredra att skapa en helt ny behållare från en uppdaterad bild med hjälp av ett docker run
eller en docker-compose.yml
fil istället för att exportera och flytta en behållares filsystem. En del av Dockers makt är granskningen och ansvarsskyldigheten för dess deklarativa stil för att skapa bilder och containrar. Genom att använda docker export
och docker import
här kraften på grund av fördunvningen av ändringar som gjorts inuti ett containers filsystem från dess ursprungliga tillstånd.
docker export -o redis.tar redis
Ovanstående kommando skapar en tom bild och exporterar sedan filsystemet för redis
till denna tomma bild. För att importera från ett tarball-arkiv använder du:
docker import ./redis.tar redis-imported:3.0.7
Det här kommandot skapar en redis-imported:3.0.7
bild, från vilken containrar kan skapas. Det är också möjligt att skapa ändringar vid import och ställa in ett meddelande om åtagande:
docker import -c="ENV DEBUG true" -m="enable debug mode" ./redis.tar redis-changed
Dockerfile-direktiven som är tillgängliga för användning med kommandorad -c
alternativet är CMD
, ENTRYPOINT
, ENV
, EXPOSE
, ONBUILD
, USER
, VOLUME
, WORKDIR
.