Instalacja Dockera na Ubuntu: APT, Snap, Rootless — Kompletny przewodnik 2026
Wybierz właściwą ścieżkę instalacji Dockera na systemie Ubuntu.
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.ioz repozytoriów Ubuntudocker-cez 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)

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.iodocker-cedocker-ce-clidocker-buildx-plugindocker-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
dockertylko zaufanych użytkowników. - Używaj Rootless Docker, gdy izolacja użytkowników ma znaczenie.
- Nie udawaj, że grupa
dockerto 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 denychroni 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.ioz 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 staregodocker-compose. - Traktuj grupę
dockerjako 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
- https://docs.docker.com/engine/install/ubuntu/ “Install Docker Engine on Ubuntu | Docker Docs”
- https://packages.ubuntu.com/noble/docker.io “Ubuntu - Details of package docker.io in noble”