docker cp

Kopiuje pliki/katalogi między kontenerem a hostem.

docker cp to twój most między światem kontenera a hostem. Kopiuje pliki i całe katalogi w obie strony: z działającego (albo nawet zatrzymanego) kontenera na dysk maszyny i odwrotnie. Przydaje się, gdy chcesz szybko wyciągnąć logi z kontenera, podrzucić poprawiony plik konfiguracyjny bez przebudowy obrazu albo zrobić backup danych, zanim coś zepsujesz. Działa tak samo na Linuksie, macOS i Windows, bo cała robota dzieje się po stronie demona Dockera, a nie systemowego cp.

Składnia i najważniejsze opcje

Kierunek kopiowania wyznacza to, po której stronie postawisz CONTAINER::

docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH

docker cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH

  • -a, --archive — tryb archiwum: zachowuje właściciela (uid/gid) z miejsca źródłowego zamiast nadpisywać go użytkownikiem docelowym.
  • -L, --follow-link — podąża za dowiązaniami symbolicznymi w SRC_PATH i kopiuje to, na co wskazują, a nie sam symlink.
  • -q, --quiet — wycisza pasek postępu (przydatne w skryptach).
  • - (myślnik zamiast ścieżki) — strumieniuje dane jako archiwum tar przez stdin/stdout, np. do potoku.

Zamiast nazwy kontenera możesz podać jego ID. Ścieżki względne liczą się od katalogu roboczego kontenera (zwykle ustawionego przez WORKDIR).

Przykłady użycia

docker cp web:/var/log/nginx/access.log ./access.log — wyciąga log z kontenera web na bieżący katalog hosta.

docker cp ./nginx.conf web:/etc/nginx/nginx.conf — wgrywa lokalny plik konfiguracyjny do kontenera (pamiętaj o przeładowaniu usługi w środku).

docker cp db:/var/lib/postgresql/data ./backup — kopiuje cały katalog z danymi, tworząc lokalny folder backup.

docker cp -a app:/app/uploads ./uploads — kopiuje katalog zachowując oryginalnych właścicieli plików.

docker cp 3f2a1b9c:/tmp/raport.csv - — strumieniuje plik jako tar na stdout, gotowy do przekierowania albo potoku.

Częste błędy i pułapki

Najczęstsza wpadka to odwrócony kierunek: jeśli zapomnisz prefiksu CONTAINER: po obu stronach, Docker potraktuje to jak zwykłe kopiowanie host-host i zgłosi błąd, że żadna ze ścieżek nie wskazuje na kontener. Druga pułapka: zachowanie zależy od końcowego ukośnika i od tego, czy katalog docelowy istnieje. SRC_PATH/. kopiuje zawartość katalogu, a SRC_PATH bez tego kopiuje sam katalog do środka celu. Pamiętaj też, że docker cp nie wywoła automatycznego przeładowania aplikacji ani nie zaktualizuje wolumenu na hoście, jeśli ścieżka jest zamontowanym wolumenem (wtedy Docker i tak ostrzeże). Do trwałych danych używaj wolumenów, nie docker cp jako głównego mechanizmu.

Powiązane komendy: docker exec, docker run -v, docker volume, docker logs, docker commit, a w klasyce systemowej cp i scp.