Instalacja Dockera na Ubuntu: APT, Snap, Rootless — Kompletny przewodnik 2026

Wybierz właściwą ścieżkę instalacji Dockera na systemie Ubuntu.

Page content

Instalacja Dockera na Ubuntu powinna być prostym zadaniem, ale w praktyce kilka opcji „w kształcie Dockera” rywalizuje o tę samą nazwę polecenia, każda z inną pakietacją, zachowaniem podczas aktualizacji oraz implikacjami bezpieczeństwa.

Ten przewodnik porównuje wszystkie główne ścieżki instalacji, abyś mógł wybrać tę, która najlepiej pasuje do Twojego sprzętu.

Opcje, na które natkniesz się, to:

  • docker.io z repozytoriów Ubuntu
  • docker-ce z oficjalnego repozytorium APT Dockera
  • Docker ze Snapa
  • Docker Desktop
  • ręcznie pobrane pakiety .deb
  • skrypt pomocniczy Dockera (convenience script)
  • Rootless Docker (Docker bez uprawnień root)

docker workplace

Mimo że wszystkie one zapewniają narzędzia do konteneryzacji, nie są to pakiety zamiennikowe. Najlepszy wybór zależy od tego, czy maszyna jest stacją roboczą programisty, runnerem CI, małym serwerem, własnym hostem (self-hosting) czy środowiskiem produkcyjnym. Moja domyślna rekomendacja jest spokojna, ale stanowcza: dla większości użytkowników technicznych na zwykłych maszynach z Ubuntu należy zainstalować Docker Engine z oficjalnego repozytorium APT Dockera. Używaj docker.io z Ubuntu tylko wtedy, gdy integracja z dystrybucją jest ważniejsza niż pakietacja upstreamowa Dockera. Unikaj pakietu Snap, chyba że celowo chcesz korzystać z mechaniki Snapa i rozumiesz jej ograniczenia. Rootless Docker warto znać, ale nie jest on automatycznie najlepszym domyślnym wyborem dla każdej maszyny.

Ten przewodnik wyjaśnia kompromisy, omawia bezpieczeństwo po instalacji i oferuje czyste ścieżki instalacyjne dla każdej metody. Gdy Docker Engine będzie działał, Ściągawka Docker będzie Twoim codziennym źródłem poleceń, a Ściągawka Docker Compose pokryje konfiguracje wielo-kontenerowe. Obie znajdują się obok przewodników Git, VS Code i CI/CD w [Narzędzia dla programistów: Kompletny przewodnik po nowoczesnych przepływach pracy](https://www.glukhov.org/pl/developer-tools/ “Opanuj podstawowe narzędzia deweloperskie dzięki kompleksowym przewodnikom: Git, Docker, VS Code, bash, Terraform, PostgreSQL, GitHub Actions oraz zarządzanie pakietami w Linuxie. Praktyczne ściągawki i przepływy pracy dla pełnoetapowego programowania.).

Szybka rekomendacja

Poniższa tabela podsumowuje, która ścieżka instalacji pasuje do typowych scenariuszy.

Przypadek użycia Zalecana instalacja
Stacja robocza programisty Oficjalne repozytorium APT Dockera
Runner CI Oficjalne repozytorium APT Dockera, z przypisaną wersją jeśli to konieczne
Mały serwer self-hosted Oficjalne repozytorium APT Dockera
Serwer produkcyjny Oficjalne repozytorium APT Dockera, kontrolowane aktualizacje
Konserwatywny system tylko na Ubuntu Pakiet Ubuntu docker.io
Szybki eksperyment na stacji roboczej Docker Desktop lub oficjalne repozytorium APT
Konfiguracja Ubuntu zarządzana przez Snap Docker Snap, ze szczególną ostrożnością
Silna wymaganie daemonu bez uprawnień root Rootless Docker
Host odizolowany od sieci (air-gapped) Pakiety .deb instalowane ręcznie lub wewnętrzne lustro

Jeśli nie masz specjalnego powodu, by wybrać inaczej, oficjalne repozytorium APT Dockera jest wartością domyślną.

Co zostaje zainstalowane

Normalna instalacja Docker Engine składa się z kilku elementów:

  • Demon Dockera: dockerd
  • CLI Dockera: docker
  • Silnik kontenerów: containerd
  • Silnik niskiego poziomu: runc
  • Wtyczka Buildx: docker buildx
  • Wtyczka Compose: docker compose

Nowoczesny Docker Compose jest zwykle instalowany jako wtyczka CLI Dockera. Oznacza to, że polecenie to:

docker compose version

A nie:

docker-compose version

Stare polecenie docker-compose nadal istnieje w starszych przewodnikach i na starszych systemach, ale nowe konfiguracje Ubuntu powinny ogólnie używać wtyczki Compose.

Opcja 1: Instalacja Dockera z oficjalnego repozytorium APT Dockera

To najlepsza opcja domyślna dla większości programistów i użytkowników DevOps. Otrzymujesz pakietację upstreamową Dockera, aktualne wydania Docker Engine, Buildx, wtyczkę Compose i normalną ścieżkę aktualizacji APT.

Najpierw usuń konfliktujące pakiety

Przed instalacją Docker CE usuń pakiety, które mogą konfliktować z oficjalnymi pakietami Dockera.

sudo apt remove docker.io docker-compose docker-compose-v2 docker-doc podman-docker containerd runc

Nie ma problemu, jeśli APT poinformuje, że niektóre z tych pakietów nie są zainstalowane.

To polecenie nie usuwa obrazów Dockera, kontenerów, woluminów ani sieci przechowywanych pod /var/lib/docker. Jeśli chcesz pełnego resetu, jest to osobny krok i należy go wykonać świadomie.

Dodaj oficjalne repozytorium APT Dockera

Zainstaluj zależności:

sudo apt update
sudo apt install ca-certificates curl

Utwórz katalog dla kluczy:

sudo install -m 0755 -d /etc/apt/keyrings

Pobierz klucz repozytorium Dockera:

sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
  -o /etc/apt/keyrings/docker.asc

Pozwól APT na odczyt klucza:

sudo chmod a+r /etc/apt/keyrings/docker.asc

Dodaj repozytorium Dockera używając formatu deb822 .sources:

sudo tee /etc/apt/sources.list.d/docker.sources > /dev/null <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt keyrings/docker.asc
EOF

Aktualizuj metadane APT:

sudo apt update

Zainstaluj Docker Engine, Buildx i Compose

sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Sprawdź usługę:

sudo systemctl status docker

Jeśli nie działa:

sudo systemctl start docker

Zweryfikuj instalację:

sudo docker run hello-world

Sprawdź wersje:

docker --version
docker buildx version
docker compose version

W tym momencie Docker działa, choć nadal potrzebujesz sudo do większości poleceń, chyba że skonfigurujesz dostęp bez uprawnień root w sekcji po instalacji poniżej.

Opcja 2: Instalacja Dockera z repozytoriów Ubuntu

Ubuntu dostarcza pakiet docker.io, który możesz zainstalować poleceniem:

sudo apt update
sudo apt install docker.io docker-compose-v2

Uruchom i włącz Dockera:

sudo systemctl enable --now docker

Zweryfikuj:

sudo docker run hello-world

Kiedy pakiet Ubuntu docker.io ma sens

Pakiet Ubuntu może być dobrą opcją, gdy:

  • Wolisz pakiety utrzymywane przez Ubuntu.
  • Chcesz wersję zgodną z procesem wydawniczym Ubuntu.
  • Zarządzasz wieloma hostami Ubuntu przy użyciu standardowych repozytoriów.
  • Nie potrzebujesz najnowszej wersji upstreamowej Dockera.
  • Chcesz mieć mniej zewnętrznych źródeł APT.

To rozsądny wybór. Nie jest „zły”.

Kiedy pakiet Ubuntu docker.io nie jest idealny

Użyj oficjalnego repozytorium Dockera zamiast tego, gdy:

  • Chcesz aktualnego Docker Engine upstream.
  • Postępujesz zgodnie z własną dokumentacją Dockera.
  • Oparcie się na aktualnym zachowaniu Buildx i Compose.
  • Wolisz nazwy pakietów Docker CE.
  • Debugujesz problemy porównując je z dokumentacją upstreamową Dockera.
  • Potrzebujesz przewidywalnej zgodności wersji Dockera między dystrybucjami.

Moja preferencja: dla maszyn deweloperskich i hostów obciążonych kontenerami używaj oficjalnego repozytorium APT Dockera. Dla konserwatywnych maszyn zarządzanych przez Ubuntu, docker.io jest akceptowalny.

Opcja 3: Instalacja Dockera ze Snapa

Snap Dockera instaluje się jednym poleceniem, ale prostota nie zawsze oznacza przewidywalne zachowanie na serwerze lub maszynie deweloperskiej.

sudo snap install docker

Pakiety Snap mają własny model pakietacji, zachowanie aktualizacji, założenia dotyczące izolacji (confinement) oraz układ systemu plików. To jest w porządku dla wielu aplikacji desktopowych, ale Docker Engine jest już silnikiem kontenerów o charakterze systemowym, więc dodatkowa warstwa Snapa może zaskoczyć ludzi. Jeśli zarządzasz innym oprogramowaniem przez Snapa, Ściągawka menedżera pakietów Snap wyjaśnia kanały, izolację i zachowanie aktualizacji w bardziej szczegółowy sposób.

Kiedy Docker Snap ma sens

Docker Snap może być rozsądny, gdy:

  • Celowo zarządzasz oprogramowaniem przy użyciu Snapa.
  • Używasz Ubuntu Core lub środowiska mocno opartego na Snapach.
  • Chcesz automatyczne aktualizacje w stylu Snap.
  • Eksperymentujesz i nie zależy Ci na zgodności z instrukcjami APT upstream Dockera.

Dlaczego zwykle unikam Dockera ze Snapa

Zwykle unikam Dockera ze Snapa do celów deweloperskich i serwerowych, ponieważ:

  • Większość dokumentacji Dockera zakłada standardowy układ Docker Engine.
  • Ścieżki rozwiązywania problemów mogą różnić się od instalacji APT.
  • Zarządzanie usługami może być mniej przejrzyste.
  • Automatyczne aktualizacje Snap mogą być niewygodne dla oprogramowania infrastrukturalnego.
  • Niektóre szczegóły dotyczące montowania bind, gniazd (sockets) i integracji z hostem mogą Cię zaskoczyć.

Jeśli Docker jest centralny dla Twojego przepływu pracy, instaluj go jak infrastrukturę, a nie jak casualową aplikację desktopową — nawet jeśli instalacja ze Snapa wydaje się kusząca na pierwszy rzut oka.

Opcja 4: Instalacja Dockera z ręcznych pakietów .deb

Ręczna instalacja .deb jest przydatna, gdy:

  • Maszyna nie może używać zewnętrznych repozytoriów APT.
  • Budujesz proces instalacji offline.
  • Lustrowasz pakiety wewnętrznie.
  • Potrzebujesz ścisłej kontroli zmian.

Koszt to utrzymanie, ponieważ musisz ręcznie pobierać i instalować nowe pakiety za każdym razem, gdy chcesz zaktualizować.

Ręczna instalacja zwykle wymaga tych pakietów:

  • containerd.io
  • docker-ce
  • docker-ce-cli
  • docker-buildx-plugin
  • docker-compose-plugin

Zainstaluj je poleceniem:

sudo dpkg -i ./containerd.io_*.deb \
  ./docker-ce_*.deb \
  ./docker-ce-cli_*.deb \
  ./docker-buildx-plugin_*.deb \
  ./docker-compose-plugin_*.deb

Następnie napraw brakujące zależności, jeśli to konieczne:

sudo apt --fix-broken install

Zweryfikuj:

sudo systemctl status docker
sudo docker run hello-world

Ręczne instalacje .deb nie są moim pierwszym wyborem, ale pozostają ważne dla kontrolowanych lub odizolowanych środowisk (air-gapped), gdzie jawne zatwierdzenie pakietów jest ważniejsze niż wygoda.

Opcja 5: Użyj skryptu pomocniczego Dockera

Docker dostarcza skrypt pomocniczy:

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

Możesz podglądnać, co by zrobił:

sudo sh get-docker.sh --dry-run

Skrypt pomocniczy jest przydatny dla jednorazowych maszyn testowych, demonstracji, laboratoriów i środowisk tymczasowych, ale nie używałbym go jako głównej metody instalacji dla systemów produkcyjnych. Skrypt, który konfiguruje repozytoria i instaluje pakiety w sposób nieinteraktywny, jest wygodny, ale długotrwała infrastruktura zasługuje na jawne, możliwe do weryfikacji kroki — więc dla hostów produkcyjnych używaj bezpośrednio metody repozytorium APT.

Docker Desktop vs Docker Engine na Ubuntu

Docker Desktop dla Linuxa to inny produkt niż Docker Engine. Docker Engine to serwerowa część runtime i przepływ pracy CLI, jakiego oczekuje większość użytkowników serwerów Linux, podczas gdy Docker Desktop dodaje interfejs graficzny, integracje desktopowe i doświadczenie użytkownika bliższe użyciu Dockera na macOS i Windows.

Używaj Docker Desktop, gdy:

  • Chcesz graficzne doświadczenie Dockera.
  • Chcesz funkcje dostępne w wersji Desktop.
  • Dostosowujesz się do zespołu, który standardyzuje na Docker Desktop.
  • Nie przeszkadza Ci dodatkowa warstwa.

Używaj Docker Engine, gdy:

  • Uruchamiasz serwer.
  • Chcesz prosty, natywny dla Linuxa runtime.
  • Wolisz usługi zarządzane przez systemd.
  • Budujesz infrastrukturę CI, DevOps lub self-hosted.
  • Nie potrzebujesz interfejsu graficznego.

Dla zaawansowanej publiczności technicznego bloga, Docker Engine jest zwykle bardziej interesującą opcją domyślną na serwerach Linux i hostach CI.

Po instalacji: Uruchamianie Dockera bez Sudo

Po instalacji to działa:

sudo docker ps

Ale to może się nie powieść:

docker ps

Dzieje się tak, ponieważ demon Dockera nasłuchuje na gnieździe Unixa należącym do roota. Standardowym rozwiązaniem jest dodanie użytkownika do grupy docker.

Utwórz grupę, jeśli to konieczne:

sudo groupadd docker

Dodaj swojego użytkownika:

sudo usermod -aG docker $USER

Zastosuj nowe przynależność do grupy:

newgrp docker

Lub wyloguj się i zaloguj ponownie.

Przetestuj:

docker run hello-world

Ważna uwaga bezpieczeństwa dotycząca grupy Docker

Grupa docker nie jest nieszkodliwą grupą ułatwiającą. Użytkownik, który może kontrolować demona Dockera, zwykle może uzyskać kontrolę równoważną rootem nad hostem, więc dla osobistej maszyny deweloperskiej jest to często akceptowalne, ale na wspólnym serwerze jest to poważna decyzja dotycząca kontroli dostępu. Traktuj przynależność do grupy docker jak dostęp administratora, a jeśli wydaje Ci się to zbyt szeroki, rozważ Rootless Docker.

Rootless Docker na Ubuntu

Rootless Docker uruchamia demona Dockera i kontenery jako użytkownik bez uprawnień root. Nie jest to to samo co dodanie użytkownika do grupy docker — z grupą docker, demon nadal działa jako root, podczas gdy w trybie rootless sam demon działa jako Twój użytkownik.

Kiedy Rootless Docker ma sens

Rootless Docker jest przydatny, gdy:

  • Chcesz zmniejszyć ryzyko związane z uprawnieniami root na poziomie daemonu.
  • Jesteś na wspólnym komputerze deweloperskim.
  • Uruchamiasz kontenery należące do użytkownika.
  • Nie potrzebujesz każdej zaawansowanej funkcji sieciowej i magazynowania.
  • Chcesz bezpieczniejszą domyślną opcję dla eksperymentalnych obciążeń.

Kiedy Rootless Docker może być uciążliwy

Rootless Docker może być mniej wygodny, gdy:

  • Potrzebujesz kontenerów z uprawnieniami privileged.
  • Oparcie się na wiązaniu niskich portów bez dodatkowej konfiguracji.
  • Potrzebujesz niektórych wzorców sieciowania hosta.
  • Oczekujesz zachowania identycznego z Dockerem rootful.
  • Postępujesz zgodnie z przewodnikami napisanymi dla normalnych instalacji Docker Engine.

Tryb rootless poprawia postawę bezpieczeństwa, ale nie jest wolny od tarcia w porównaniu ze standardową instalacją rootful.

Instalacja Rootless Docker

Zainstaluj zależności:

sudo apt update
sudo apt install uidmap

Jeśli zainstalowałeś Dockera z pakietów DEB lub APT, narzędzie do konfiguracji rootless powinno być dostępne:

dockerd-rootless-setuptool.sh install

Jeśli rootful Docker już działa i chcesz tylko Rootless Docker, wyłącz systemowy daemon:

sudo systemctl disable --now docker.service docker.socket

Możesz też potrzebować usunąć gniazdo rootful:

sudo rm -f /var/run/docker.sock

Po zainstalowaniu Rootless Docker, narzędzie konfiguracyjne zwykle drukuje zmienne środowiskowe do dodania do profilu powłoki. Zazwyczaj wyglądają tak:

export PATH=/usr/bin:$PATH
export DOCKER_HOST=unix:///run/user/1000/docker.sock

Twój UID może się różnić. Sprawdź dokładny output z narzędzia konfiguracyjnego.

Włącz linger, jeśli chcesz, aby usługa użytkownika działała po wylogowaniu:

sudo loginctl enable-linger $USER

Sprawdź usługę użytkownika:

systemctl --user status docker

Uruchom testowy kontener:

docker run hello-world

Rootful Docker vs Rootless Docker

Temat Rootful Docker Rootless Docker
Użytkownik daemonu root normalny użytkownik
Wygoda poleceń wysoka średnia
Kompatybilność najwyższa dobra, ale nie idealna
Postawa bezpieczeństwa słabsza domyślnie lepsza domyślnie
Kontenery privileged obsługiwane ograniczone
Niskie porty proste wymaga dodatkowej konfiguracji
Użycie serwerowe powszechne możliwe, ale planuj ostrożnie
Stacja robocza programisty powszechne dobra dla świadomych bezpieczeństwa użytkowników

Moja praktyczna rekomendacja:

  • Używaj normalnego rootful Dockera dla osobistej maszyny deweloperskiej lub prostego serwera.
  • Dodawaj do grupy docker tylko zaufanych użytkowników.
  • Używaj Rootless Docker, gdy izolacja użytkowników ma znaczenie.
  • Nie udawaj, że grupa docker to granica bezpieczeństwa.

Włącz Dockera przy starcie systemu

Na Ubuntu Docker zainstalowany ze standardowych pakietów zwykle startuje automatycznie, ale warto to potwierdzić po świeżej instalacji lub migracji.

Sprawdź:

systemctl is-enabled docker
systemctl is-enabled containerd

Włącz ręcznie, jeśli to konieczne:

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

Uruchom teraz:

sudo systemctl start docker

Wyłącz auto-start:

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

Dla Rootless Docker użyj usługi użytkownika:

systemctl --user enable docker
systemctl --user start docker

I włącz linger, jeśli to konieczne:

sudo loginctl enable-linger $USER

Zainstaluj lub zweryfikuj Docker Compose

Z oficjalnym repozytorium APT Dockera, zainstaluj Compose jako wtyczkę:

sudo apt update
sudo apt install docker-compose-plugin

Zweryfikuj:

docker compose version

Jeśli zainstalowałeś pakiet Ubuntu, możesz użyć:

sudo apt install docker-compose-v2

Preferuj:

docker compose up -d

Nad starą stylizacją:

docker-compose up -d

Polecenie z myślnikiem docker-compose należy do starszej ery samodzielnej Compose. Wiele systemów nadal go ma, ale nowa dokumentacja powinna używać docker compose.

Sprawdź, który Docker masz zainstalowany

Gdy przejmujesz maszynę lub debugujesz uszkodzoną konfigurację, te polecenia pomagają zidentyfikować, która pakietacja Dockera jest faktycznie używana.

Sprawdź binarny plik Dockera:

which docker

Sprawdź właściciela pakietu:

dpkg -S "$(which docker)"

Wylistuj pakiety związane z Dockerem:

dpkg -l | grep -E 'docker|containerd|runc'

Sprawdź politykę APT:

apt-cache policy docker-ce docker.io containerd.io docker-compose-plugin docker-compose-v2

Sprawdź Snap:

snap list | grep docker

Sprawdź status usługi:

systemctl status docker
systemctl status containerd

Sprawdź szczegóły serwera Dockera:

docker info

Jeśli docker info nie działa bez sudo, sprawdź swoją przynależność do grup:

groups

Migracja z Ubuntu docker.io do Docker CE

Zatrzymaj Dockera:

sudo systemctl stop docker

Usuń pakiety Ubuntu:

sudo apt remove docker.io docker-compose docker-compose-v2 docker-doc containerd runc

Dodaj oficjalne repozytorium APT Dockera, używając kroków powyżej.

Zainstaluj Docker CE:

sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Uruchom Dockera:

sudo systemctl start docker

Sprawdź istniejące kontenery:

docker ps -a
docker images
docker volume ls

Normalnie usuwanie pakietów nie usuwa /var/lib/docker, więc Twoje obrazy, kontenery i woluminy mogą nadal istnieć. Nadal, najpierw wykonaj kopię zapasową ważnych danych.

Migracja z Docker Snap do Docker CE

Najpierw zinspekcjonuj, co istnieje:

snap list | grep docker
docker info

Zatrzymaj obciążenia i wykonaj kopię zapasową ważnych woluminów lub danych zamontowanych bind.

Usuń snap:

sudo snap remove docker

Następnie zainstaluj Docker CE z oficjalnego repozytorium APT.

Bądź ostrożny z lokalizacjami danych. Pakiety Snap często używają różnych ścieżek i reguł izolacji. Nie zakładaj, że dane z Docker Snap automatycznie pojawią się pod standardową ścieżką /var/lib/docker po migracji.

Dla ważnych usług, eksportuj lub wykonaj kopię zapasową danych jawnie przed zmianą źródeł pakietów.

Przypnij wersję Dockera z APT

Dla systemów produkcyjnych możesz chcieć kontrolowanych aktualizacji.

Wylistuj dostępne wersje:

apt list --all-versions docker-ce

Zainstaluj konkretną wersję:

VERSION_STRING="5:29.0.0-1~ubuntu.24.04~noble"

sudo apt install docker-ce=$VERSION_STRING \
  docker-ce-cli=$VERSION_STRING \
  containerd.io \
  docker-buildx-plugin \
  docker-compose-plugin

Zablokuj pakiety Dockera:

sudo apt-mark hold docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Odblokuj później:

sudo apt-mark unhold docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Rób to, gdy potrzebujesz przewidywalnych okien zmian. Dla osobistego laptopa może to być niepotrzebne.

Uwagi dotyczące zapory sieciowej i sieci

Docker modyfikuje reguły filtrowania pakietów, aby umożliwić działanie sieci kontenerów, co ma znaczenie, jeśli używasz UFW, firewalld, nftables lub niestandardowych reguł zapory.

Ważne punkty:

  • Opublikowane porty Dockera mogą ominąć naiwne oczekiwania UFW.
  • Docker używa integracji z iptables.
  • Niestandardowe reguły powinny uwzględniać łańcuchy utworzone przez Dockera.
  • Hardening serwera powinien być testowany z rzeczywistymi mapowaniami portów kontenerów.
  • Nie zakładaj, że ufw deny chroni port opublikowany przez Dockera.

Testuj wystawione porty z innej maszyny, nie tylko z localhost.

Przykład:

docker run --rm -p 8080:80 nginx

Następnie z innego hosta:

curl http://server-ip:8080

Na serwerach sieci Dockera jest częścią Twojego modelu bezpieczeństwa, a nie szczegółem implementacyjnym, który można ignorować po instalacji.

Typowe błędy i rozwiązania

Brak uprawnień na gnieździe Dockera

Błąd:

permission denied while trying to connect to the Docker daemon socket

Opcje naprawy:

Użyj sudo:

sudo docker ps

Lub dodaj użytkownika do grupy docker:

sudo usermod -aG docker $USER
newgrp docker

Pamiętaj, że grupa docker jest w praktyce równoważna rootowi, więc traktuj przynależność do grupy jako decyzję dotyczącą dostupu uprzywilejowanego.

Demon Dockera nie działa

Sprawdź status:

sudo systemctl status docker

Uruchom go:

sudo systemctl start docker

Sprawdź logi:

journalctl -u docker --no-pager -n 100

Konfliktujące pakiety Dockera

Jeśli instalacja Docker CE nie powiedzie się z powodu konfliktów, usuń stare pakiety. Jeśli sam APT jest w złym stanie po dodaniu repozytorium Dockera, przejdź przez Rozwiązywanie problemów z Ubuntu APT dla uszkodzonych pakietów i błędów GPG przed ponowną próbą.

sudo apt remove docker.io docker-compose docker-compose-v2 docker-doc podman-docker containerd runc

Następnie spróbuj ponownie:

sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Polecenie Compose nie znalezione

Sprawdź nowoczesny Compose:

docker compose version

Zainstaluj wtyczkę:

sudo apt install docker-compose-plugin

Jeśli oczekiwałeś starego polecenia:

docker-compose version

Możesz postępować zgodnie ze starą dokumentacją. Preferuj aktualizację polecenia do docker compose.

Stara konfiguracja Dockera należąca do roota

Jeśli uruchamiałeś Dockera z sudo przed skonfigurowaniem dostępu grupowego, Twoja konfiguracja użytkownika może należeć do roota.

Napraw właściciela:

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

Lub usuń konfigurację, jeśli jej nie potrzebujesz:

sudo rm -rf "$HOME/.docker"

Zostanie ona odtworzona.

Nie można połączyć się z Rootless Docker

Sprawdź środowisko:

echo "$DOCKER_HOST"

Sprawdź usługę użytkownika:

systemctl --user status docker

Ustaw ścieżkę gniazda, jeśli to konieczne:

export DOCKER_HOST=unix:///run/user/$(id -u)/docker.sock

Dodaj ją do profilu powłoki dopiero po potwierdzeniu, że jest poprawna.

Odinstaluj Docker Engine

Usuń pakiety Docker CE:

sudo apt purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras

Usuń dane Dockera tylko, jeśli naprawdę chcesz usunąć obrazy, kontenery i woluminy:

sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

Usuń pliki repozytorium Dockera:

sudo rm -f /etc/apt/sources.list.d/docker.sources
sudo rm -f /etc/apt/keyrings/docker.asc

Odśwież APT:

sudo apt update

Dla Docker Snap:

sudo snap remove docker

Dla Ubuntu docker.io:

sudo apt purge docker.io docker-compose-v2

Rekomendowana ścieżka instalacji dla większości użytkowników Ubuntu

Dla większości użytkowników technicznych Ubuntu, to jest czysta ścieżka:

sudo apt remove docker.io docker-compose docker-compose-v2 docker-doc podman-docker containerd runc

sudo apt update
sudo apt install ca-certificates curl

sudo install -m 0755 -d /etc/apt/keyrings

sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
  -o /etc/apt/keyrings/docker.asc

sudo chmod a+r /etc/apt/keyrings/docker.asc

sudo tee /etc/apt/sources.list.d/docker.sources > /dev/null <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt keyrings/docker.asc
EOF

sudo apt update

sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

sudo docker run hello-world

Następnie zdecyduj, czy chcesz dostęp grupowy dla wygody, czy Rootless Docker dla ścisłej izolacji:

sudo usermod -aG docker $USER
newgrp docker
docker run hello-world

Ostateczna, zdaniowa rada

Instalacja Dockera na Ubuntu to wybór operacyjny, a nie tylko wybór pakietu. Metoda, którą wybierzesz, wpływa na aktualizacje, granice bezpieczeństwa i jak bardzo Twój host pasuje do dokumentacji upstream Dockera.

Moje praktyczne zasady to:

  • Używaj oficjalnego repozytorium APT Dockera dla większości maszyn deweloperskich i DevOps.
  • Używaj docker.io z Ubuntu, gdy spójność repozytoriów Ubuntu jest ważniejsza niż świeżość upstream.
  • Unikaj Docker Snap dla poważnych przepływów kontenerowych, chyba że celowo chcesz zachowania Snap.
  • Unikaj skryptu pomocniczego dla hostów produkcyjnych.
  • Używaj nowoczesnego docker compose, a nie starego docker-compose.
  • Traktuj grupę docker jako dostęp uprzywilejowany.
  • Rozważ Rootless Docker, gdy izolacja użytkowników ma znaczenie.
  • Przypinaj wersje w systemach produkcyjnych.
  • Testuj zachowanie zapory przy publikowaniu portów na serwerach.

Naj nudniejsza instalacja Dockera jest zwykle najlepsza: oficjalne repozytorium APT, jawny klucz, wtyczka Compose, usługa systemd, zrozumiane uprawnienia i brak tajemniczej warstwy pakietowej w środku. Gdy silnik jest w miejscu, obciążenia wielo-usługowe — w tym stosy self-hosted LLM — są naturalnym kolejnym krokiem; na przykład, zobacz Ollama w Docker Compose aby uruchamiać lokalne modele w kontenerach. Aby utrzymać stos Compose uruchomiony przez restarty na jednym serwerze, Uruchom Docker Compose jako usługę Linux z systemd przechodzi przez pliki jednostek i nawyki operacyjne.

Przeczytaj więcej

Subskrybuj

Otrzymuj nowe wpisy o systemach, infrastrukturze i inżynierii AI.