Sök…


Syntax

  • docker run [OPTIONS] IMAGE [COMMAND] [ARG ...]

Köra en container

docker run hello-world

Detta hämtar den senaste hallo-världsbilden från Docker Hub (om du inte redan har den), skapar en ny behållare och kör den. Du bör se ett meddelande om att din installation verkar fungera korrekt.

Kör ett annat kommando i behållaren

docker run docker/whalesay cowsay 'Hello, StackExchange!'

Detta kommando säger Docker att skapa en behållare från docker/whalesay bilden och köra kommandot cowsay 'Hello, StackExchange!' i det. Det bör skriva ut en bild av en val som säger Hello, StackExchange! till din terminal.

Om ingångspunkten i bilden är standard kan du köra alla kommandon som är tillgängliga i bilden:

docker run docker/whalesay ls /

Om det har ändrats under bildbyggnad måste du vända tillbaka det till standard

docker run --entrypoint=/bin/bash docker/whalesay -c ls /

Radera automatiskt en behållare efter att ha kört den

Normalt kvarstår en Docker-behållare efter att den har gått ut. Detta låter dig köra behållaren igen, inspektera dess filsystem och så vidare. Men ibland vill du köra en container och ta bort den omedelbart efter att den har slutat. Till exempel för att köra ett kommando eller visa en fil från filsystemet. Docker tillhandahåller kommandoradsalternativet - --rm för detta ändamål:

docker run --rm ubuntu cat /etc/hosts

Detta skapar en behållare från "ubuntu" -bilden, visar innehållet i / etc / hosts- filen och raderar sedan behållaren omedelbart efter att den har gått ut. Detta hjälper till att förhindra att du behöver städa upp behållare efter att du har gjort experiment.

Obs: --rm flaggan fungerar inte tillsammans med -d (- --detach ) -flaggan i dockaren <1.13.0.

När --rm flagga är inställd, tar Docker också bort volymerna som är associerade med behållaren när behållaren tas bort. Detta liknar köra docker rm -v my-container . Endast volymer som anges utan namn tas bort .

Till exempel med docker run -it --rm -v /etc -v logs:/var/log centos /bin/produce_some_logs kommer volymen av /etc att tas bort, men volymen på /var/log kommer inte. Volymer som ärvts via - volumes-from kommer att tas bort med samma logik - om den ursprungliga volymen anges med ett namn kommer den inte att tas bort.

Ange ett namn

Som standard ges behållare som skapats med docker run ett slumpmässigt namn som small_roentgen eller modest_dubinsky . Dessa namn är inte särskilt användbara för att identifiera syftet med en container. Det är möjligt att ange ett namn för behållaren genom att --name kommandoradsalternativet - --name :

docker run --name my-ubuntu ubuntu:14.04

Namnen måste vara unika; om du skickar ett namn som en annan behållare redan använder, kommer Docker att skriva ut ett fel och ingen ny behållare skapas.

Att ange ett namn kommer att vara användbart när man hänvisar till behållaren i ett Docker-nätverk. Detta fungerar för både bakgrunds- och förgrundsdockerbehållare.

Behållare i standardbronätverket måste vara länkade för att kommunicera med namn.

Binder en containerport till värden

docker run -p "8080:8080" myApp
docker run -p "192.168.1.12:80:80" nginx
docker run -P myApp

För att använda portar på värden har blivit exponerade i en bild (via EXPOSE Dockerfile-direktivet eller - --expose kommandoradsalternativet för docker run ) måste dessa portar vara bundna till värden med kommandot -p eller -P radalternativ. Att använda -p kräver att den specifika porten (och valfritt värdgränssnitt) ska anges. Med hjälp av det stora bokstaven -P kommandorad-alternativet kommer Docker att tvinga att binda alla exponerade portar i en behållares bild till värden.

Policy för omstart av behållare (starta en container vid start)

docker run --restart=always -d <container>

Som standard kommer Docker inte att starta om behållare när Docker-demonet startar om, till exempel efter omstart av ett värdsystem. Docker tillhandahåller en omstartpolicy för dina containrar genom att tillhandahålla kommandoradsalternativet - --restart . Leverera - --restart=always kommer alltid att göra att en behållare startas om efter att Docker-demonet har startats om. Men när den behållaren stoppas manuellt (t.ex. med docker stop <container> ) kommer omstartpolicyn inte att tillämpas på behållaren.

Flera alternativ kan anges för alternativet - --restart baserat på kravet (- --restart=[policy] ). Dessa alternativ påverkar också hur containern startar vid start.

Politik Resultat
Nej Standardvärdet . Startar inte behållaren automatiskt igen när behållaren stoppas.
on-misslyckande [: max-återförsök] Starta om endast om behållaren slutar med ett fel ( non-zero exit status ). För att undvika att starta om det på obestämd tid (i fall av problem) kan man begränsa antalet omstart försöker Docker-daemonförsöken.
alltid Starta alltid om behållaren oavsett utgångsstatus. När du always anger, kommer Docker-demonen att försöka starta om behållaren på obestämd tid. Behållaren startar också alltid vid start av demon, oavsett behållarens nuvarande tillstånd.
såvida-stoppad Starta alltid om behållaren oavsett utgångsstatus, men starta inte den vid start av demon om behållaren har stoppats till tidigare.

Kör en container i bakgrunden

För att hålla en container igång i bakgrunden, -d alternativet -d kommandorad under containerstart:

docker run -d busybox top

Alternativet -d kör behållaren i fristående läge. Det motsvarar också -d=true .

En behållare i fristående läge kan inte tas bort automatiskt när den stannar, det betyder att man inte kan använda alternativet - rm i kombination med -d-alternativet.

Tilldela en volym till en behållare

En Docker-volym är en fil eller katalog som kvarstår utöver behållarens livslängd. Det är möjligt att montera en värdfil eller katalog i en behållare som en volym (kringgå UnionFS).

Lägg till en volym med -v kommandoraden alternativ:

docker run -d -v "/data" awesome/app bootstrap.sh

Detta skapar en volym och monterar den på sökvägen /data inuti behållaren.

  • Obs: Du kan använda flaggan - --rm att automatiskt ta bort volymen när behållaren tas bort.

Montering av värdkataloger

Så här monterar du en värdfil eller katalog i en behållare:

docker run -d -v "/home/foo/data:/data" awesome/app bootstrap.sh
  • När du anger en värdkatalog måste en absolut sökväg anges.

Detta kommer att montera värdkatalogen /home/foo/data/data inuti behållaren. Denna "bindande monterade värdkatalog" -volym är samma sak som en Linux- mount --bind och mount --bind därför tillfälligt värdkatalogen över den angivna behållarvägen under hela behållarens livslängd. Förändringar i volymen från antingen värden eller behållaren återspeglas omedelbart i den andra eftersom de är samma destination på disken.

UNIX-exempel på montering av en relativ mapp

docker run -d -v $(pwd)/data:/data awesome/app bootstrap.sh

Namnge volymer

En volym kan namnges genom att tillhandahålla en sträng istället för en värdkatalogväg, dockaren skapar en volym med det namnet.

docker run -d -v "my-volume:/data" awesome/app bootstrap.sh

När du har skapat en namngiven volym kan volymen sedan delas med andra behållare med det namnet.

Ställa in miljövariabler

$ docker run -e "ENV_VAR=foo" ubuntu /bin/bash

Både -e och --env kan användas för att definiera miljövariabler inuti en container. Det är möjligt att tillhandahålla många miljövariabler med en textfil:

$ docker run --env-file ./env.list ubuntu /bin/bash

Exempel på miljövariabelfil:

# This is a comment
TEST_HOST=10.10.0.127

--env-file tar ett filnamn som ett argument och förväntar sig att varje rad ska vara i VARIABLE=VALUE , vilket efterliknar argumentet som skickas till --env . Kommentarrader behöver bara förinställas med # .

Oavsett --env-file på dessa tre flaggor --env-file först och sedan -e / --env flaggorna. På detta sätt kommer alla miljövariabler som levereras individuellt med -e eller --env att åsidosätta variabler som levereras i --env-var textfilen.

Ange ett värdnamn

Som standard ges behållare skapade med dockarkörning ett slumpmässigt värdnamn. Du kan ge behållaren ett annat värdnamn genom att skicka flaggan - värdnamn:

docker run --hostname redbox -d ubuntu:14.04

Kör en container interaktivt

För att köra en container interaktivt, skicka in -it alternativen:

$ docker run -it ubuntu:14.04 bash
root@8ef2356d919a:/# echo hi
hi
root@8ef2356d919a:/#

-i håller STDIN öppen, medan -t tilldelar en pseudo-TTY.

Kör behållare med minne / växlingsgränser

Ställ in minnesgränsen och inaktivera swap-gränsen

docker run -it -m 300M --memory-swap -1 ubuntu:14.04 /bin/bash

Ställ in både minne och växlingsgräns. I detta fall kan behållaren använda 300M minne och 700M byte.

docker run -it -m 300M --memory-swap 1G ubuntu:14.04 /bin/bash

Skaffa ett skal i en löpande (fristående) behållare

Logga in i en löpande behållare

En användare kan ange en löpande behållare i ett nytt interaktivt bashell med exec kommando.

Säg att en behållare kallas jovial_morse så kan du få en interaktiv, pseudo-TTY bashell genom att köra:

docker exec -it jovial_morse bash

Logga in i en behållare med en specifik användare

Om du vill ange en behållare som en specifik användare kan du ställa in den med -u eller - --user . Användarnamnet måste finnas i behållaren.

-u, --user Användarnamn eller UID (format: <name|uid>[:<group|gid>] )

Detta kommando loggar in i jovial_morse med dockeruser användaren

docker exec -it -u dockeruser jovial_morse bash

Logga in i en löpande behållare som root

Om du vill logga in som root använder du bara -u root parametern. Rotanvändare finns alltid.

docker exec -it -u root jovial_morse bash

Logga in på en bild

Du kan också logga in på en bild med run kommandot, men det kräver en bildnamn i stället för en behållare namn.

docker run -it dockerimage bash

Logga in på en mellanliggande bild (felsökning)

Du kan också logga in på en mellanliggande bild, som skapas under en Dockerfile-konstruktion.

Output från docker build .

$ docker build .
Uploading context 10240 bytes
Step 1 : FROM busybox
Pulling repository busybox
 ---> e9aa60c60128MB/2.284 MB (100%) endpoint: https://cdn-registry-1.docker.io/v1/
Step 2 : RUN ls -lh /
 ---> Running in 9c9e81692ae9
total 24
drwxr-xr-x    2 root     root        4.0K Mar 12  2013 bin
drwxr-xr-x    5 root     root        4.0K Oct 19 00:19 dev
drwxr-xr-x    2 root     root        4.0K Oct 19 00:19 etc
drwxr-xr-x    2 root     root        4.0K Nov 15 23:34 lib
lrwxrwxrwx    1 root     root           3 Mar 12  2013 lib64 -> lib
dr-xr-xr-x  116 root     root           0 Nov 15 23:34 proc
lrwxrwxrwx    1 root     root           3 Mar 12  2013 sbin -> bin
dr-xr-xr-x   13 root     root           0 Nov 15 23:34 sys
drwxr-xr-x    2 root     root        4.0K Mar 12  2013 tmp
drwxr-xr-x    2 root     root        4.0K Nov 15 23:34 usr
 ---> b35f4035db3f
Step 3 : CMD echo Hello world
 ---> Running in 02071fceb21b
 ---> f52f38b7823e

Lägg märke till ---> Running in 02071fceb21b du ---> Running in 02071fceb21b utgången kan du logga in på dessa bilder:

docker run -it 02071fceb21b bash

Skickar stdin till behållaren

I fall som att återställa en databasdump, eller på annat sätt vill driva lite information genom ett rör från värden, kan du använda -i flaggan som ett argument för att docker run eller docker exec .

Om du t.ex. antar att du vill lägga till en containeriserad mariadb-klient en databasdump som du har på värden, i en lokal dump.sql fil, kan du utföra följande kommando:

docker exec -i mariadb bash -c 'mariadb "-p$MARIADB_PASSWORD" ' < dump.sql

I allmänhet,

docker exec -i container command < file.stdin

Eller

docker exec -i container command <<EOF
inline-document-from-host-shell-HEREDOC-syntax
EOF

Ta loss från en behållare

När du är ansluten till en löpande behållare med en tilldelad pty ( docker run -it ... ), kan du trycka på Control P - Control Q för att lossa.

Överträffar bildintrångsdirektivet

docker run --name="test-app" --entrypoint="/bin/bash" example-app

Detta kommando kommer att åsidosätta ENTRYPOINT direktivet för example-app bilden när containertest test-app skapas. CMD direktivet för bilden kommer att förbli oförändrat om inte annat anges:

docker run --name="test-app" --entrypoint="/bin/bash" example-app /app/test.sh

I exemplet ovan har både ENTRYPOINT och CMD för bilden åsidosatts. Denna containerprocess blir /bin/bash /app/test.sh .

Lägg till värdpost i behållaren

docker run --add-host="app-backend:10.15.1.24" awesome-app

Detta kommando lägger till en post i behållarens /etc/hosts fil som följer formatet - --add-host <name>:<address> . I det här exemplet kommer namnet app-backend att lösa till 10.15.1.24 . Detta är särskilt användbart för att binda olika app-komponenter programmatiskt.

Förhindra att behållaren stannar när inga kommandon körs

En behållare stannar om inget kommando körs i förgrunden. Att använda alternativet -t förhindrar behållaren från att stoppa, även om den är frikopplad med alternativet -d .

docker run -t -d debian bash

Stoppa en behållare

docker stop mynginx

Dessutom kan behållar-ID också användas för att stoppa behållaren i stället för dess namn.

Detta kommer att stoppa en löpande behållare genom att skicka SIGTERM-signalen och sedan SIGKILL-signalen om det behövs.

Vidare kan kill-kommandot användas för att omedelbart skicka en SIGKILL eller någon annan specificerad signal med hjälp av -s alternativet.

docker kill mynginx

Specificerad signal:

docker kill -s SIGINT mynginx

Att stoppa en behållare tar inte bort den. Använd docker ps -a att se din stoppade behållare.

Kör ett annat kommando på en behållare som körs

Vid behov kan du be Docker att utföra ytterligare kommandon på en redan körd behållare med exec kommandot. Du behöver behållarens ID som du kan få med docker ps .

docker exec 294fbc4c24b3 echo "Hello World"

Du kan bifoga ett interaktivt skal om du använder alternativet -it .

docker exec -it 294fbc4c24b3 bash

Kör GUI-appar i en Linux-behållare

Som standard kan en Docker-behållare inte köra en GUI-applikation.

Innan detta måste X11-uttaget först vidarebefordras till behållaren så att det kan användas direkt. Miljövariabeln DISPLAY måste också vidarebefordras:

docker run -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=unix$DISPLAY <image-name>

Detta kommer att misslyckas först, eftersom vi inte angav behörigheterna för X-servervärdet:

cannot connect to X server unix:0

Det snabbaste (men inte säkraste) sättet är att tillåta åtkomst direkt med:

xhost +local:root

Efter avslutad behållare kan vi återgå till det ursprungliga tillståndet med:

xhost -local:root

Ett annat (säkrare) sätt är att förbereda en Dockerfile som kommer att bygga en ny bild som använder våra användaruppgifter för att komma åt X-servern:

FROM <iamge-name>
MAINTAINER <you>

# Arguments picked from the command line!
ARG user
ARG uid
ARG gid

#Add new user with our credentials
ENV USERNAME ${user}
RUN useradd -m $USERNAME && \
        echo "$USERNAME:$USERNAME" | chpasswd && \
        usermod --shell /bin/bash $USERNAME && \
        usermod  --uid ${uid} $USERNAME && \
        groupmod --gid ${gid} $USERNAME

USER ${user}

WORKDIR /home/${user}

När docker build anropar docker build från kommandoraden måste vi passera ARG- variablerna som visas i Dockerfile:

docker build --build-arg user=$USER --build-arg uid=$(id -u) --build-arg gid=$(id -g) -t <new-image-with-X11-enabled-name> -f <Dockerfile-for-X11> .

Innan vi lekar en ny behållare måste vi nu skapa en xauth-fil med åtkomsttillstånd:

xauth nlist $DISPLAY | sed -e 's/^..../ffff/' | xauth -f /tmp/.docker.xauth nmerge -

Denna fil måste monteras i behållaren när du skapar / kör den:

docker run -e DISPLAY=unix$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix -v /tmp/.docker.xauth:/tmp/.docker.xauth:rw -e XAUTHORITY=/tmp/.docker.xauth


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow