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

Sep 14, 2017 14:53 · 201 words · 1 minute read docker

Время от времени появляется необходимость сбрасывать файл из 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
tweet Share