docker exec uruchamia nowe polecenie wewnątrz już działającego kontenera. To Twoje główne narzędzie, gdy chcesz „wejść do środka” zdebugować coś na żywo, sprawdzić logi w nietypowym miejscu albo wyklikać szybkiego SQL-a bez restartu usługi. Kluczowe słowo: działającego — jeśli kontener jest zatrzymany, exec nic nie da (do tego masz docker run). Polecenie startuje jako osobny proces obok głównego procesu kontenera (PID 1) i nie wpływa na jego cykl życia.
Składnia i najważniejsze opcje
Podstawa wygląda tak: docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
-i,--interactive— trzyma otwarte STDIN, nawet gdy nie jest podłączone. Niezbędne, gdy chcesz coś wpisywać.-t,--tty— przydziela pseudo-terminal (TTY). W parze z-idaje normalną, interaktywną powłokę.-d,--detach— uruchamia polecenie w tle i od razu zwalnia terminal.-u,--user— wykonuje jako konkretny użytkownik, np.-u rootalbo-u 1000:1000.-w,--workdir— ustawia katalog roboczy dla polecenia.-e,--env— wstrzykuje zmienną środowiskową;--env-filewczytuje je z pliku.--privileged— daje poleceniu rozszerzone uprawnienia (ostrożnie).
Przykłady użycia
docker exec -it moja-app bash— otwiera interaktywną powłokę bash w kontenerzemoja-app. Najczęstszy scenariusz „wejdę i zobaczę”.docker exec -it db sh— to samo, ale gdy w obrazie nie ma basha (alpine), używasz lżejszegosh.docker exec -u root -it web bash— wchodzisz jako root, gdy domyślny użytkownik nie ma uprawnień do instalacji pakietów czy edycji plików.docker exec db psql -U postgres -c "SELECT now();"— odpala pojedyncze polecenie i zwraca wynik bez wchodzenia do powłoki.docker exec -w /var/log app tail -n 50 app.log— uruchamia polecenie w wskazanym katalogu roboczym.
Częste błędy i pułapki
- Brak
-it— powłoka odpalona bez-itnatychmiast się zamknie albo nie przyjmie wpisywanych znaków. Zapamiętaj parę-itprzy każdej interaktywnej sesji. - „executable file not found” — to znaczy, że w obrazie nie ma danego polecenia. Minimalne obrazy (alpine, distroless) często nie mają basha ani nawet
sh. Wtedy spróbujshalbo zainstaluj narzędzie. - Kontener musi działać —
execnie wskrzesi zatrzymanego kontenera. Sprawdź stan przezdocker ps; jeśli go tam nie ma, kontener nie żyje. - Zmiany bywają ulotne — to, co zainstalujesz przez
exec, zniknie po odtworzeniu kontenera. Trwałe rzeczy wpisuj doDockerfile, nie klikaj ręcznie. - Kolejność flag — opcje idą przed nazwą kontenera. Wszystko po nazwie to już polecenie i jego argumenty, nie flagi Dockera.
Powiązane komendy: docker run, docker attach, docker ps, docker logs, docker cp, kubectl exec.