в docker, tips

Docker совет №1: Вывод содержимого файла из контейнера


Время от времени появляется необходимость сбрасывать файл из docker-контейнера на хост-систему. Вот один из способов сделать это — давайте разберемся!

Такая необходимость возникает прежде всего при отладке, например, когда нужно скопировать содержимое файла конфигурации из контейнера, чтобы открыть его в своем любимом редакторе, или когда требуется отправить кому-то дамп конфигурационного файла. Конечно, можно сразу запускать docker-контейнеры с монтированием томов (volumes) из хост-системы в контейнер, но вы ведь не знаете, какой конфиг вам может потребоваться?

В первом случае, когда у вас уже запущен docker-контейнер, и вы не желаете перезапускать его с монтированием тома, получить содержимое конфигурационного файла можно так:

docker exec nginx cat /etc/hosts
127.0.0.1   localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.20.0.3  d09203ce7f6e

Во втором случае, когда контейнер еще не запущен, получить конфиг можно так:

docker run --rm alpine cat /etc/hosts
127.0.0.1   localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2  67451966e901

Но это только половина дела — не забудьте перенаправить этот вывод в новый файл на хост-системе, вот так:

docker run --rm alpine cat /etc/hosts > ~/temp.txt

Теперь проверим содержимое файла:

cat ~/temp.txt 
127.0.0.1   localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2  22c44d8dc95c

Добавить комментарий