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
- configureren Docker om te starten tijdens het opstarten
- gebruik een andere storage engine
- configureren standaard logboekstuurprogramma
- configureer waar de Docker-daemon luistert naar verbindingen
- externe toegang configureren met systemd-eenheidsbestand
- externe toegang configureren met daemon.json
- IPv6 inschakelen op de Docker-daemon
- probleemoplossing
- Kernelcompatibiliteit
- kan geen verbinding maken met de Docker-daemon
- IP-doorstuurproblemen
- DNS-resolver gevonden in resolv.conf en containers kunnen het niet gebruiken
- geef DNS-servers op voor Docker
- Disable dnsmasq
- Ubuntu
- RHEL, CentOS, or Fedora
- toegang tot de remote API via een firewall
- uw kernel ondersteunt geen cgroup swap limit mogelijkheden
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 deroot
gebruiker. 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:
-
maak de
docker
groep.$ sudo groupadd docker
-
voeg uw gebruiker toe aan de
docker
groep.$ sudo usermod -aG docker $USER
-
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
-
Controleer of u
docker
opdrachten kunt uitvoeren zondersudo
.$ 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 dedocker
groep, kunt u de volgende fout zien,die aangeeft dat uw~/.docker/
map is aangemaakt met correctieve rechten als gevolg van desudo
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
systemd
om 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 het
json-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.service
systemd-eenheidsbestand voor Linux-distributies met systemd, zoals recente versies van RedHat, CentOS, Ubuntu en SLES, of met hetdaemon.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 hetdaemon.json
bestand veroorzaakt een conflict dat het starten van Docker voorkomt.externe toegang configureren met systemd-eenheidsbestand
-
gebruik het commando
sudo systemctl edit docker.service
om een override-bestand te openen voordocker.service
in een teksteditor. -
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
-
sla het bestand op.
-
herlaad de
systemctl
configuratie.$ sudo systemctl daemon-reload
-
herstart Docker.
$ sudo systemctl restart docker.service
-
Controleer of de verandering werd gehonoreerd door de uitvoer van
netstat
te controleren om te bevestigen datdockerd
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
-
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": }
Docker herstarten.
Controleer of de wijziging werd gehonoreerd door de uitvoer van
netstat
te controleren om te bevestigen datdockerd
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.sh
script 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
metsystemd
versie 219 of hoger, hebben Docker containers mogelijk geen toegang tot uw netwerk.Beginnend metsystemd
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 denet.ipv4.conf.all.forwarding
instelling in containers in te schakelen.om dit te omzeilen op RHEL, CentOS of Fedora, bewerk je het
<interface>.network
bestand 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 desection.
...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 een
dnsmasq
instantie gebruikt die draait op een loopback-adres zoals127.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 zoals127.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 op8.8.8.8
en8.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 vandnsmasq
.
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
.-
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
-
voeg een
dns
sleutel toe met een of meer IP-adressen als waarden. Als het bestand bestaande inhoud heeft, hoeft u alleen dedns
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.
Herstart de Docker-daemon.
$ sudo service docker restart
Controleer of Docker externe IP-adressen kan oplossen door animage te Pullen:
$ docker pull hello-world
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
dnsmasq
in NetworkManager.-
Bewerk het
/etc/NetworkManager/NetworkManager.conf
bestand. -
commentaar geven op de
dns=dnsmasq
regel door een#
teken toe te voegen aan het begin van de regel.# dns=dnsmasq
het bestand opslaan en sluiten.
-
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
dnsmasq
op RHEL, CentOS, of Fedora:-
deactiveer de
dnsmasq
service:$ sudo service dnsmasq stop$ sudo systemctl disable dnsmasq
-
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 of2375
anders.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.
-
Log in op de Ubuntu-of Debian-host als een gebruiker met
sudo
bevoegdheden. -
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.
-
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
-
-