Articles

Efter installationssteg för Linux

Beräknad lästid: 15 minuter

det här avsnittet innehåller valfria procedurer för att konfigurera Linux-värdar att workbetter med Docker.

hantera Docker som en icke-root-användare

Docker-demonen binder till ett Unix-uttag istället för en TCP-port. Genom standarddet Unix-uttaget ägs av användaren root och andra användare kan bara komma åt detmed sudo. Docker-demonen körs alltid somroot användare.

om du inte vill förorda kommandotdocker medsudo, skapa en Unixgroup som heterdocker och Lägg till användare till den. När Docker-demonen startar, denskapar ett Unix-uttag som är tillgängligt för medlemmar i gruppen docker.

Varning

docker gruppen ger privilegier som motsvararrootanvändaren. För mer information om hur detta påverkar säkerheten i ditt system, seedockerdemon Attack yta.

Obs:

för att köra Docker utan root-privilegier, sekör Docker-demonen som en icke-root-användare (rotlöst läge).

för att skapa gruppen docker och Lägg till din användare:

  1. skapa gruppen docker.

    $ sudo groupadd docker
  2. Lägg till din användare i gruppen docker.

    $ sudo usermod -aG docker $USER
  3. Logga ut och logga in igen så att ditt gruppmedlemskap utvärderas igen.

    om testning på en virtuell maskin kan det vara nödvändigt att starta om den virtuella maskinen för att ändringarna ska träda i kraft.

    på en stationär Linux-miljö som X Windows, logga ut från din session helt och logga sedan in igen.

    På Linux kan du också köra följande kommando för att aktivera ändringarna i grupper:

    $ newgrp docker 
  4. kontrollera att du kan köradocker kommandon utansudo.

    $ docker run hello-world

    detta kommando hämtar en testbild och kör den i en behållare. När thecontainer körs skriver den ut ett informationsmeddelande och avslutas.

    om du ursprungligen körde Docker CLI-kommandon med sudo innan du lägger tilldin användare i docker – gruppen kan du se följande fel, vilket indikerar att din ~/.docker/ – katalog skapades medfelaktiga behörigheter på grund av sudo kommandon.

    WARNING: Error loading config file: /home/user/.docker/config.json -stat /home/user/.docker/config.json: permission denied

    för att åtgärda detta problem, antingen ta bort~/.docker/ katalog (det återskapas automatiskt, men alla anpassade inställningarär förlorade), eller ändra sitt ägande och behörigheter medföljande kommandon:

    $ sudo chown "$USER":"$USER" /home/"$USER"/.docker -R$ sudo chmod g+rwx "$HOME/.docker" -R

    konfigurera Docker för att starta vid start

    de flesta aktuella Linux-distributioner (RHEL, CentOS, Fedora, Debian, Ubuntu 16.04 ochhögre) använd systemdför att hantera vilka tjänster som startar när systemboots. På Debian och Ubuntu är Docker-tjänsten konfigurerad att starta vid uppstartsom standard. För att automatiskt starta Docker och Containerd vid start för otherdistros, använd kommandona nedan:

    $ sudo systemctl enable docker.service$ sudo systemctl enable containerd.service

    för att inaktivera detta beteende, använd istället disable.

    $ sudo systemctl disable docker.service$ sudo systemctl disable containerd.service

    om du behöver lägga till en HTTP-Proxy, ange en annan katalog eller partition för theDocker runtime-filer, eller göra andra anpassningar, seanpassa dina systemd Docker-demonalternativ.

    använd en annan lagringsmotor

    För information om de olika lagringsmotorerna, selagringsdrivrutiner.Standardlagringsmotorn och listan över lagringsmotorer som stöds beror pådin värds Linux-distribution och tillgängliga kärndrivrutiner.

    konfigurera standardloggningsdrivrutin

    Docker ger möjlighet att samla in och visa loggdata från alla behållare som körs på en värd via en serie avloggningsdrivrutiner. Standardloggningsdrivrutinen, json-file, skriver loggdata tilljson-formaterade filer på värdfilsystemet. Med tiden expanderar dessa loggfileri storlek, vilket leder till potentiell uttömning av diskresurser.

    för att lindra sådana problem, konfigurera antingenjson-file loggningsdrivrutin för att aktivera loggrotation, använd alternativ loggningsdrivrutinsom den ”lokala” loggningsdrivrutinensom utför loggrotation som standard, eller använd en loggningsdrivrutin som skickar loggar till en fjärrloggningsaggregat.

    konfigurera var Docker-demonen lyssnar efter anslutningar

    som standard lyssnar Docker-demonen efter anslutningar på ett UNIX-uttag för att acceptera förfrågningar från lokala klienter. Det är möjligt att tillåta Docker att acceptera förfrågningar från fjärrvärdar genom att konfigurera den för att lyssna på en IP-adress och port samtsom UNIX-uttaget. För mer detaljerad information om detta konfigurationsalternativta en titt på avsnittet ”Bind Docker till en annan värd/port eller ett unix-uttag” i Docker CLI-Referensartikeln.

    säkra din anslutning

    innan du konfigurerar Docker för att acceptera anslutningar från fjärrvärdar är det kritiskt viktigt att du förstår säkerhetsimplikationerna av att öppna docker till nätverket. Om åtgärder inte vidtas för att säkra anslutningen är det möjligt för fjärranslutna icke-root-användare att få root-åtkomst på värden. Mer information om hur du använder TLS-certifikat för att säkra den här anslutningen finns i den här artikeln om hur du skyddar Docker daemon-uttaget.

    konfigurera Docker för att acceptera fjärranslutningar kan göras med filendocker.servicesystemd-enhet för Linux-distributioner med systemd, till exempel senaste versionerav RedHat, CentOS, Ubuntu och SLES, eller med filendaemon.json som ärrekommenderas för Linux-distributioner som inte använder systemd.

    systemd vs daemon.JSON

    konfigurera Docker för att lyssna efter anslutningar med både systemd enhetsfilen och daemon.json – filen orsakar en konflikt som förhindrar att Docker startar.

    konfigurera fjärråtkomst med systemd unit file

    1. använd kommandot sudo systemctl edit docker.service för att öppna en åsidosättningsfil för docker.service I en textredigerare.

    2. Lägg till eller ändra följande rader, ersätta dina egna värden.

      ExecStart=ExecStart=/usr/bin/dockerd -H fd:// -H tcp://127.0.0.1:2375
    3. spara filen.

    4. ladda omsystemctl konfiguration.

       $ sudo systemctl daemon-reload
    5. Starta om Docker.

      $ sudo systemctl restart docker.service
    6. kontrollera om ändringen hedrades genom att granska utmatningen från netstat för att bekräfta dockerd lyssnar på den konfigurerade porten.

      $ sudo netstat -lntp | grep dockerdtcp 0 0 127.0.0.1:2375 0.0.0.0:* LISTEN 3758/dockerd

      konfigurera fjärråtkomst med demonen.JSON

      1. Ställ in hosts arrayen i /etc/docker/daemon.json för att ansluta till UNIX-uttaget och en IP-adress, enligt följande:

        { "hosts": }

      2. starta om Docker.

      3. kontrollera om ändringen var hedrad genom att granska utmatningen från netstat för att bekräfta dockerd lyssnar på den konfigurerade porten.

        $ sudo netstat -lntp | grep dockerdtcp 0 0 127.0.0.1:2375 0.0.0.0:* LISTEN 3758/dockerd

        aktivera IPv6 på Docker-demonen

        för att aktivera IPv6 på Docker-demonen, seeEnable IPv6-stöd.

        felsökning

        Kärnkompatibilitet

        Docker kan inte köras korrekt om din kärna är äldre än version 3.10 eller om det saknas några moduler. För att kontrollera kärnkompatibilitet kan du ladda ner andrun skriptet check-config.sh.

        $ curl https://raw.githubusercontent.com/docker/docker/master/contrib/check-config.sh > check-config.sh$ bash ./check-config.sh

        skriptet fungerar bara på Linux, inte macOS.

        kan inte ansluta till Docker-demonen

        Om du ser ett fel som följande kan din Docker-klient konfigureras för att ansluta till en Docker-Demon på en annan värd, och den värden kanske inte kan nås.

        Cannot connect to the Docker daemon. Is 'docker daemon' running on this host?

        för att se vilken värd din klient är konfigurerad att ansluta till, kontrollera värdet av DOCKER_HOST variabel i din miljö.

        $ env | grep DOCKER_HOST

        om detta kommando returnerar ett värde är Docker-klienten inställd på att ansluta till adockerdemonen som körs på den värden. Om den inte är inställd är Docker-klienten inställd påanslut till Docker-demonen som körs på den lokala värden. Om det är felaktigt,använd följande kommando för att avmarkera det:

        $ unset DOCKER_HOST

        Du kan behöva redigera din miljö i filer som ~/.bashrc eller~/.profile för att förhindra att DOCKER_HOST variabel från att vara seterroneously.

        om DOCKER_HOST är inställd som avsedd, kontrollera att Docker-demonen körspå fjärrvärden och att en brandvägg eller ett nätverksavbrott inte hindrar dig från att ansluta.

        IP-vidarebefordringsproblem

        om du manuellt konfigurerar ditt nätverk med systemd-network med systemdversion 219 eller senare kanske Docker-behållare inte kan komma åt ditt nätverk.Från och med systemd version 220, är vidarebefordringsinställningen för ett givet nätverk(net.ipv4.conf.<interface>.forwarding) som standard av. Denna inställningförhindrar IP-vidarebefordran. Det strider också mot Dockers beteende att aktiveranet.ipv4.conf.all.forwarding inställning i behållare.

        för att komma runt detta på RHEL, CentOS eller Fedora, redigera filen<interface>.networkI/usr/lib/systemd/network/ på din Docker-värd(ex:/usr/lib/systemd/network/80-container-host0.network) och lägg tillföljande block i avsnitt.

        ...IPForward=kernel# ORIPForward=true

        denna konfiguration tillåter IP-vidarebefordran från behållaren som förväntat.

        DNS resolver finns i resolv.Conf och behållare kan inte använda den

        Linux-system som använder ett GUI har ofta en nätverkshanterare som kör, som använder endnsmasq instans som körs på en loopback-adress som 127.0.0.1 eller127.0.1.1 för att cache DNS-förfrågningar, och lägger till denna post till/etc/resolv.conf. Tjänstendnsmasq snabbar upp uppdateringar och tillhandahåller även DHCP-tjänster. Den här konfigurationen fungerar inte i en Docker-behållare som har sitt eget nätverksnamnområde, eftersomdocker-behållaren löser loopback-adresser som 127.0.0.1 till sig själv, och det är mycket osannolikt att köra en DNS-server på egen handloopback-adress.

        om Docker upptäcker att ingen DNS-server som refereras i /etc/resolv.conf är en FULLYFUNCTIONAL DNS-server inträffar följande varning och Docker använder publicDNS-servrarna som tillhandahålls av Google på 8.8.8.8 och 8.8.4.4 för DNS-upplösning.

        WARNING: Local (127.0.0.1) DNS resolver found in resolv.conf and containerscan't use it. Using default external servers : 

        om du ser denna varning, kontrollera först om du använder dnsmasq:

        $ ps aux |grep dnsmasq

        om din behållare behöver lösa värdar som är interna till ditt nätverk, thepublic namnservrar är inte tillräckliga. Du har två val:

        • Du kan ange en DNS-server för Docker att använda, eller
        • Du kan inaktivera dnsmasq I NetworkManager. Om du gör detta, NetworkManageradds din sanna DNS namnserver till /etc/resolv.conf, men du förlorar de möjliga fördelarna med dnsmasq.

        du behöver bara använda en av dessa metoder.

        ange DNS-servrar för Docker

        standardplatsen för konfigurationsfilen är /etc/docker/daemon.json. Dukan ändra platsen för konfigurationsfilen med flaggan --config-filedaemon. Dokumentationen nedan förutsätter att konfigurationsfilen är lokaliseradvid /etc/docker/daemon.json.

        1. skapa eller redigera Docker daemon-konfigurationsfilen, som standard är/etc/docker/daemon.json – filen, som styr Docker daemonconfiguration.

          $ sudo nano /etc/docker/daemon.json
        2. Lägg till endns nyckel med en eller flera IP-adresser som värden. Om filen harexisterande innehåll behöver du bara lägga till eller redigera raden dns.

          { "dns": }

          om din interna DNS-server inte kan lösa offentliga IP-adresser, inkludera minst en DNS-server som kan, så att du kan ansluta till Docker Hub och så att dina behållare kan lösa internetdomännamn.

          spara och stäng filen.

        3. Starta om Docker-demonen.

          $ sudo service docker restart
        4. kontrollera att Docker kan lösa externa IP-adresser genom att försöka dra animage:

          $ docker pull hello-world
        5. kontrollera vid behov att Docker-behållare kan lösa ett internt värdnamngenom att pinga det.

          $ docker run --rm -it alpine ping -c4 <my_internal_host>PING google.com (192.168.1.2): 56 data bytes64 bytes from 192.168.1.2: seq=0 ttl=41 time=7.597 ms64 bytes from 192.168.1.2: seq=1 ttl=41 time=7.635 ms64 bytes from 192.168.1.2: seq=2 ttl=41 time=7.660 ms64 bytes from 192.168.1.2: seq=3 ttl=41 time=7.677 ms

        inaktivera dnsmasq

        Ubuntu

        om du föredrar att inte ändra Docker-demonens konfiguration för att använda en specifik IP-adress, följ dessa instruktioner för att inaktivera dnsmasq I NetworkManager.

        1. redigera filen /etc/NetworkManager/NetworkManager.conf.

        2. kommenteradns=dnsmasq rad genom att lägga till ett# tecken till början av raden.

          # dns=dnsmasq

          spara och stäng filen.

        3. Starta om både NetworkManager och Docker. Som ett alternativ kan du starta omditt system.

          $ sudo restart network-manager$ sudo restart docker
        RHEL, CentOS eller Fedora

        för att inaktivera dnsmasq på RHEL, CentOS eller Fedora:

        1. inaktivera dnsmasq service:

          $ sudo service dnsmasq stop$ sudo systemctl disable dnsmasq
        2. konfigurera DNS-servrarna manuellt med hjälp avred Hat-dokumentation.

        Tillåt åtkomst till remote API via en brandvägg

        om du kör en brandvägg på samma värd som du kör Docker och du vill komma åtdocker Remote API från en annan värd och fjärråtkomst är aktiverad behöver duför att konfigurera din brandvägg för att tillåta inkommande anslutningar på Docker-porten, som standard 2376 om TLS-krypterad transport är aktiverad eller 2375annars.

        två vanliga brandväggsdemoner ärufw (okomplicerad brandvägg) (oftaanvänds för Ubuntu-system) och firewalld (används oftaför RPM-baserade system). Se dokumentationen för ditt operativsystem och brandvägg, men följande information kan hjälpa dig att komma igång. Dessa alternativ är fairlypermissive och du kanske vill använda en annan konfiguration som låser yoursystem ner mer.

        • UFW: Ställ in DEFAULT_FORWARD_POLICY="ACCEPT" I din konfiguration.

        • firewalld: Lägg till regler som liknar följande i din policy (en för kommande förfrågningar och en för utgående förfrågningar). Se till att gränssnittsnamnen och kedjans namn är korrekta.

          <direct> </direct>

          din kärna stöder inte cgroup swap limit capabilities

          På Ubuntu-eller Debian-värdar kan du se meddelanden som liknar följande när du arbetar med en bild.

          WARNING: Your kernel does not support swap limit capabilities. Limitation discarded.

          denna varning förekommer inte på RPM-baserade system, vilket möjliggör dessa möjligheter som standard.

          Om du inte behöver dessa funktioner kan du ignorera varningen. Du kan aktivera dessa funktioner på Ubuntu eller Debian genom att följa dessa instruktioner. Memoryand swap accounting medför en omkostnad på cirka 1% av det totala tillgängliga minnet och en total prestandaförsämring på 10%, även om Docker inte körs.

          1. Logga in på Ubuntu – eller Debian-värden som användare medsudo privilegier.

          2. redigera filen /etc/default/grub. Lägg till eller redigera linjen GRUB_CMDLINE_LINUX Lägg till följande två nyckelvärdespar:

            GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"

            spara och stäng filen.

          3. uppdatera GRUB.

            $ sudo update-grub

            om din GRUB-konfigurationsfil har felaktig syntax kan ett fel occurs.In detta fall, upprepa steg 2 och 3.

            ändringarna träder i kraft när systemet startas om.

          • ta en titt på utbildningsmodulerna Kom igång för att lära dig hur du bygger en bild och kör den som en containeriserad applikation.
          • granska ämnena i Utveckla med Docker för att lära dig att bygga nya applikationer med Docker.

          Docker, Docker dokumentation, krav, apt, installation, ubuntu, installera, avinstallera, uppgradera, uppdatera