Глиф Учебники

Как скопировать файл в контейнер и из него

Справочник · Docker · 1 минута чтения

С хоста в контейнер:

Bash
docker cp ./index.html web:/usr/share/nginx/html/index.html

Из контейнера на хост:

Bash
docker cp web:/etc/nginx/nginx.conf ./nginx.conf

web — имя или идентификатор контейнера; между именем и путём внутри контейнера — двоеточие. Контейнер может быть и работающим, и остановленным.

Папки

Bash
docker cp web:/etc/nginx/conf.d ./conf.d
docker cp ./site/. web:/usr/share/nginx/html/

Правила как у cp -a:

Родительские папки назначения docker cp не создаёт: копирование в web:/no/such/dir/file.txt закончится ошибкой.

Владелец файлов

Файлы, скопированные в контейнер, получают владельца root. Если программа в контейнере работает от другого пользователя и должна менять файл, поправьте владельца:

Bash
docker exec -u root web chown nginx:nginx /usr/share/nginx/html/index.html

Файлы, скопированные из контейнера, принадлежат пользователю, который выполнил docker cp.

В Docker Compose

Bash
docker compose cp ./index.html web:/usr/share/nginx/html/index.html

Здесь web — имя сервиса из compose.yaml, а не контейнера.

Подводные камни

Файл, скопированный внутрь контейнера, лежит в его слое для записи. При пересоздании контейнера — обновлении образа, docker compose up -d после правки, docker rm — он пропадёт. Для файлов, которые должны жить долго (настройки, сайт, данные), подключайте папку или том: -v ./site:/usr/share/nginx/html:ro.