Articles

Post-installatie stappen voor Linux

geschatte leestijd: 15 minuten

Deze sectie bevat optionele procedures voor het configureren van Linux hosts om beter te werken met Docker.

Docker beheren als een niet-root gebruiker

De Docker-daemon bindt aan een Unix-socket in plaats van een TCP-poort. Standaard is de Unix socket eigendom van de gebruiker root en andere gebruikers hebben alleen toegang tot de socket met sudo. De Docker-daemon draait altijd als deroot gebruiker.

Als u het commando docker niet wilt voorwoord met sudo, maak dan een Unixgroep aan met de naam docker en voeg er gebruikers aan toe. Wanneer de Docker-daemon wordt gestart, wordt een Unix-socket aangemaakt die toegankelijk is voor leden van de docker groep.

waarschuwing

de docker Groep verleent privileges die gelijkwaardig zijn aan de rootgebruiker. Voor details over hoe dit de veiligheid in uw systeem beïnvloedt, seeDocker Daemon Attack Surface.

opmerking:

om Docker zonder root-rechten uit te voeren, moet u de Docker-daemon zien als een niet-root-gebruiker (Rootless-modus).

om de docker groep aan te maken en uw gebruiker toe te voegen:

  1. maak de docker groep.

    $ sudo groupadd docker
  2. voeg uw gebruiker toe aan de docker groep.

    $ sudo usermod -aG docker $USER
  3. uitloggen en opnieuw inloggen zodat uw groepslidmaatschap opnieuw wordt geëvalueerd.

    bij testen op een virtuele machine kan het nodig zijn om de virtuele machine opnieuw op te starten om wijzigingen door te voeren.

    op een desktop Linux omgeving zoals X Windows, log je volledig uit je sessie en log je vervolgens weer in.

    Op Linux kunt u ook het volgende commando uitvoeren om de wijzigingen in groepen te activeren:

    $ newgrp docker 
  4. Controleer of u docker opdrachten kunt uitvoeren zonder sudo.

    $ docker run hello-world

    Dit commando downloadt een testimage en voert het uit in een container. Wanneer de container loopt, drukt het een informatieve boodschap af en verlaat het.

    Als u in eerste instantie Docker CLI-commando ‘ s hebt uitgevoerd met sudo voordat u uw gebruiker toevoegt aan de docker groep, kunt u de volgende fout zien,die aangeeft dat uw ~/.docker/ map is aangemaakt met correctieve rechten als gevolg van de sudo commando ‘ s.

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

    om dit probleem op te lossen, verwijdert u de ~/.docker/ Map(deze wordt automatisch opnieuw gemaakt, maar alle aangepaste instellingen zijn verloren gegaan), of wijzigt u de eigendom en rechten met behulp van de volgende commando ‘ s:

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

    configureren Docker om te starten tijdens het opstarten

    De meeste huidige Linux distributies (RHEL, CentOS, Fedora, Debian, Ubuntu 16.04 enhigher) gebruik systemdom te beheren welke services starten als het systeem opstart. Op Debian en Ubuntu is de Docker-service geconfigureerd om standaard op bootby te starten. Om Docker en Containerd automatisch te starten tijdens het opstarten van andere distros, gebruik je de onderstaande commando ‘ s:

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

    om dit gedrag uit te schakelen, gebruik je disable.

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

    Als u een HTTP-Proxy wilt toevoegen, een andere map of partitie wilt instellen voor de Docker runtime-bestanden, of andere aanpassingen wilt maken, kunt u uw systemd Docker-daemonopties aanpassen.

    gebruik een andere storage engine

    voor informatie over de verschillende storage engines, seeStorage drivers.De standaard storage engine en de lijst met ondersteunde storage engines zijn afhankelijk van de Linux distributie van uw host en de beschikbare kernel drivers.

    configureren standaard logboekstuurprogramma

    Docker biedt de mogelijkheid om loggegevens te verzamelen en te bekijken van alle containers die op een host worden uitgevoerd via een reeks logboekstuurprogramma ‘ s. Het standaard logboekstuurprogramma, json-file, schrijft loggegevens naar JSON-geformatteerde bestanden op het hostbestandssysteem. Na verloop van tijd, deze logbestanden expandin grootte, wat leidt tot potentiële uitputting van schijfbronnen.

    om dergelijke problemen te verhelpen, configureert u hetjson-file logboekstuurprogramma om logrotatie mogelijk te maken, gebruikt u analternatieve logboekstuurprogramma ‘ s zoals het “lokale” logboekstuurprogramma dat standaard logboekrotatie uitvoert, of gebruikt u een logboekstuurprogramma dat logboeken verstuurt naar een remote logboekaggregator.

    configureer waar de Docker-daemon luistert naar verbindingen

    standaard luistert de Docker-daemon naar verbindingen op een UNIX-socket om verzoeken van lokale clients te accepteren. Het is mogelijk om Docker toe te staan aanvragen van externe hosts te accepteren door het te configureren om te luisteren op een IP-adres en poort evenals op de UNIX socket. Voor meer gedetailleerde informatie over deze configuratie optie kijk op “Bind Docker naar een andere host / poort of een unix socket” sectie van het Docker CLI referentie artikel.

    Beveilig uw verbinding

    voordat u Docker configureert om verbindingen van externe hosts te accepteren, is het van cruciaal belang dat u begrijpt wat de beveiligingsimplicaties zijn van het openen van docker op het netwerk. Als er geen stappen worden ondernomen om de verbinding te beveiligen, is het mogelijk voor externe niet-root gebruikers om root toegang te krijgen op de host. Voor meer informatie over het gebruik van TLS-certificaten om deze verbinding te beveiligen, vink je dit artikel aan over hoe je de Docker-daemon-socket kunt beschermen.

    het configureren van Docker om externe verbindingen te accepteren kan worden gedaan met het docker.servicesystemd-eenheidsbestand voor Linux-distributies met systemd, zoals recente versies van RedHat, CentOS, Ubuntu en SLES, of met het daemon.json bestand dat wordt aanbevolen voor Linux-distributies die geen gebruik maken van systemd.

    systemd vs daemon.json

    Het instellen van Docker om te luisteren naar verbindingen met behulp van zowel het systemd eenheidsbestand en het daemon.json bestand veroorzaakt een conflict dat het starten van Docker voorkomt.

    externe toegang configureren met systemd-eenheidsbestand

    1. gebruik het commando sudo systemctl edit docker.service om een override-bestand te openen voor docker.service in een teksteditor.

    2. voeg de volgende regels toe of wijzig ze, door uw eigen waarden te vervangen.

      ExecStart=ExecStart=/usr/bin/dockerd -H fd:// -H tcp://127.0.0.1:2375
    3. sla het bestand op.

    4. herlaad de systemctl configuratie.

       $ sudo systemctl daemon-reload
    5. herstart Docker.

      $ sudo systemctl restart docker.service
    6. Controleer of de verandering werd gehonoreerd door de uitvoer van netstat te controleren om te bevestigen dat dockerd luistert op de geconfigureerde poort.

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

    externe toegang configureren met daemon.json

    1. Stel de hosts array in de /etc/docker/daemon.json om verbinding te maken met de UNIX-socket en een IP-adres, als volgt:

      { "hosts": }
  5. Docker herstarten.

  6. Controleer of de wijziging werd gehonoreerd door de uitvoer van netstat te controleren om te bevestigen dat dockerd luistert op de geconfigureerde poort.

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

    IPv6 inschakelen op de Docker-daemon

    om IPv6 inschakelen op de Docker-daemon, zie IPv6-ondersteuning inschakelen.

    probleemoplossing

    Kernelcompatibiliteit

    Docker kan niet correct draaien als uw kernel ouder is dan Versie 3.10 of als er enkele modules ontbreken. Om de compatibiliteit van de kernel te controleren, kunt u het check-config.shscript downloaden en uitvoeren.

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

    het script werkt alleen op Linux, niet op macOS.

    kan geen verbinding maken met de Docker-daemon

    Als u een fout ziet zoals het volgende, kan uw Docker-client worden geconfigureerd om verbinding te maken met een Docker-daemon op een andere host, en die host is mogelijk niet bereikbaar.

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

    om te zien met welke host uw client verbinding moet maken, controleer de waarde van de DOCKER_HOST variabele in uw omgeving.

    $ env | grep DOCKER_HOST

    als dit commando een waarde retourneert, wordt de Docker-client ingesteld om verbinding te maken met aDocker-daemon die op die host draait. Als het niet is ingesteld, wordt de Docker client ingesteld om verbinding te maken met de Docker daemon die draait op de lokale host. Als het fout is ingesteld, gebruik dan het volgende commando om het uit te zetten:

    $ unset DOCKER_HOST

    mogelijk moet u uw omgeving bewerken in bestanden zoals ~/.bashrc of~/.profile om de variabele wordt niet standaard ingesteld.

    als DOCKER_HOST is ingesteld zoals bedoeld, controleer dan of de Docker-daemon draait op de externe host en of een firewall of Netwerkstoring u niet verhindert verbinding te maken.

    IP-doorstuurproblemen

    Als u uw netwerk handmatig configureert met systemd-network met systemdversie 219 of hoger, hebben Docker containers mogelijk geen toegang tot uw netwerk.Beginnend met systemd versie 220, is de doorstuurinstelling voor een bepaald netwerk(net.ipv4.conf.<interface>.forwarding) standaard uitgeschakeld. Deze instelling voorkomt IP forwarding. Het conflicteert ook met het gedrag van Docker om de net.ipv4.conf.all.forwarding instelling in containers in te schakelen.

    om dit te omzeilen op RHEL, CentOS of Fedora, bewerk je het <interface>.networkbestand in /usr/lib/systemd/network/ op je Docker host(bijvoorbeeld: /usr/lib/systemd/network/80-container-host0.network) en voeg het volgende blok toe binnen de section.

    ...IPForward=kernel# ORIPForward=true

    Deze configuratie staat IP forwarding toe vanuit de container zoals verwacht.

    DNS-resolver gevonden in resolv.conf en containers kunnen het niet gebruiken

    Linux-systemen die een GUI gebruiken hebben vaak een netwerkbeheerder die eendnsmasq instantie gebruikt die draait op een loopback-adres zoals 127.0.0.1 of127.0.1.1 om DNS-verzoeken in de cache te zetten, en deze regel toevoegt aan/etc/resolv.conf. Dednsmasq service versnelt het opzoeken van upDNS en biedt ook DHCP-diensten. Deze configuratie werkt niet in een Docker-container met een eigen netwerknaamruimte, omdat de Docker-container loopback-adressen zoals 127.0.0.1 zelf oplost, en het zeer onwaarschijnlijk is dat een DNS-server op zijn eigen loopback-adres draait.

    als Docker detecteert dat er geen DNS-server waarnaar wordt verwezen in /etc/resolv.conf een volledig functionerende DNS-server is, treedt de volgende waarschuwing op en Docker gebruikt de publicDNS-servers van Google op 8.8.8.8 en 8.8.4.4 voor DNS-resolutie.

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

    Als u deze waarschuwing ziet, controleer dan eerst of u dnsmasq:

    $ ps aux |grep dnsmasq

    als uw container hosts moet oplossen die intern zijn in uw netwerk, de public nameservers niet voldoende zijn. U hebt twee keuzes:

    • u kunt een DNS-server opgeven die Docker moet gebruiken, of
    • u kunt dnsmasq uitschakelen in NetworkManager. Als u dit doet, voegt NetworkManager uw echte DNS-nameserver toe aan /etc/resolv.conf, maar u verliest de mogelijke voordelen van dnsmasq.

    u hoeft slechts één van deze methoden te gebruiken.

    geef DNS-servers op voor Docker

    De standaardlocatie van het configuratiebestand is /etc/docker/daemon.json. U kunt de locatie van het configuratiebestand wijzigen met de daemonvlag --config-file. De documentatie hieronder gaat ervan uit dat het configuratiebestand is gelokaliseerd op /etc/docker/daemon.json.

    1. maak of bewerk het configuratiebestand van de Docker-daemon, dat standaard/etc/docker/daemon.json bestand, dat de configuratie van de Docker-daemon regelt.

      $ sudo nano /etc/docker/daemon.json
    2. voeg een dns sleutel toe met een of meer IP-adressen als waarden. Als het bestand bestaande inhoud heeft, hoeft u alleen de dns regel toe te voegen of te bewerken.

      { "dns": }

      als uw interne DNS-server publieke IP-adressen niet kan oplossen, moet u ten minste één DNS-server opnemen die dat wel kan, zodat u verbinding kunt maken met Docker Hub en uw containers internetdomeinnamen kunnen oplossen.

      sla het bestand op en sluit het.

    3. Herstart de Docker-daemon.

      $ sudo service docker restart
    4. Controleer of Docker externe IP-adressen kan oplossen door animage te Pullen:

      $ docker pull hello-world
    5. indien nodig, controleer of Docker containers een interne hostnaam kunnen oplossen door deze te pingen.

      $ 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

      Disable dnsmasq

      Ubuntu

      Als u de configuratie van de Docker-daemon niet wilt wijzigen om een specifiek adres te gebruiken, volg dan deze instructies om dnsmasqin NetworkManager.

      1. Bewerk het /etc/NetworkManager/NetworkManager.conf bestand.

      2. commentaar geven op dedns=dnsmasq regel door een# teken toe te voegen aan het begin van de regel.

        # dns=dnsmasq

        het bestand opslaan en sluiten.

      3. herstart zowel NetworkManager als Docker. Als alternatief kunt u uw systeem opnieuw opstarten.

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

        om dnsmasqop RHEL, CentOS, of Fedora:

        1. deactiveer de dnsmasqservice:

          $ sudo service dnsmasq stop$ sudo systemctl disable dnsmasq
        2. Configureer de DNS-servers handmatig met behulp van de Sered Hat-documentatie.

        toegang tot de remote API via een firewall

        Als u een firewall op dezelfde host als u Docker en u wilt accessthe Docker Remote API van een andere host en remote toegang is ingeschakeld, kunt u needto configureren van uw firewall binnenkomende verbindingen op het Koppelvenster de haven,standaard 2376 als TLS gecodeerd transport is ingeschakeld of 2375anders.

        twee gemeenschappelijke firewall daemons zijnufw (ongecompliceerde Firewall) (vaak gebruikt voor Ubuntu-systemen) en firewalld (vaak gebruikt voor RPM-gebaseerde systemen). Raadpleeg de documentatie voor uw besturingssysteem en firewall, maar de volgende informatie kan u helpen aan de slag te gaan. Deze opties zijn fairlypermissive en je wilt misschien een andere configuratie gebruiken die je systeem meer vergrendelt.

        • UFW: stel DEFAULT_FORWARD_POLICY="ACCEPT" in uw configuratie in.

        • firewalld: voeg regels toe die vergelijkbaar zijn met de volgende regels aan uw beleid (één voor incoming requests en één voor uitgaande requests). Zorg ervoor dat de interface namen en ketting namen correct zijn.

          <direct> </direct>

        uw kernel ondersteunt geen cgroup swap limit mogelijkheden

        Op Ubuntu of Debian hosts, kunt u berichten zien die vergelijkbaar zijn met de volgende wanneer u met een afbeelding werkt.

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

        Deze waarschuwing komt niet voor op RPM-gebaseerde systemen, die deze mogelijkheden standaard inschakelen.

        als u deze mogelijkheden niet nodig hebt, kunt u de waarschuwing negeren. U kunt deze mogelijkheden op Ubuntu of Debian inschakelen door deze instructies te volgen. Memoryand swap accounting heeft een overhead van ongeveer 1% van de totale beschikbare memoryen een algehele prestatievermindering van 10%, zelfs als Docker niet draait.

        1. Log in op de Ubuntu-of Debian-host als een gebruiker metsudo bevoegdheden.

        2. Bewerk het /etc/default/grub bestand. Voeg deGRUB_CMDLINE_LINUX regel toe om de volgende twee sleutelwaardeparen toe te voegen:

          GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"

          het bestand opslaan en sluiten.

        3. Grub bijwerken.

          $ sudo update-grub

          als uw GRUB-configuratiebestand een onjuiste syntaxis heeft, kan er een fout optreden occurs.In herhaal in dit geval stap 2 en 3.

          de wijzigingen worden van kracht wanneer het systeem opnieuw wordt opgestart.

        • neem een kijkje in de aan de slag trainings modules om te leren hoe je een image te bouwen en draaien als een containerized applicatie.
        • bekijk de onderwerpen in ontwikkelen met Docker om te leren hoe u nieuwe applicaties kunt bouwen met Docker.

        Docker, Docker-documentatie, vereisten, Apt, installatie, ubuntu, installeren, verwijderen, upgraden, bijwerken