Как запустить 2 команды с помощью docker exec

Мне нужно запустить 2 команды с помощью docker exec. Я копирую файл из контейнера докера и не хочу иметь дело с учетными данными, чтобы использовать что-то вроде ssh. Эта команда копирует файл:

sudo docker exec boring_hawking tar -cv /var/log/file.log | tar -x

Но он создает подкаталог var/log, я хочу избежать этого, поэтому, если бы я мог сделать это в контейнере докера, я должен быть хорошим:

cd /var/log ; tar -cv ./file.log

Как я могу выполнить команды запуска docker exec 2?

Ответы

Ответ 1

Это привело к ответу: Символ Escape в командной строке Docker Я закончил это:

sudo docker exec boring_hawking bash -c 'cd /var/log ; tar -cv ./file.log' | tar -x

Таким образом, он работает, вроде, запуская одну команду bash с параметром, который является 2 командами, которые я хочу запустить.

Ответ 2

Довольно часто необходимость в нескольких командах состоит в том, чтобы изменить рабочий каталог - как в вопросе OP.

Для этого в Docker теперь есть опция -w для указания рабочего каталога. Например. в настоящем деле

docker exec -w /var/log boring_hawking tar -cv ./file.log

Ответ 3

Если кто-то еще пришел сюда за замечательным ответом, но также хочет найти лучший способ решения исходной проблемы OP (OP OP..?), Чтобы скопировать файл из контейнера докера, теперь есть команда docker cp, которая сделает это: https://docs.docker.com/engine/reference/commandline/cp/

Ответ 4

Для всех, кто сталкивается с этим и хочет по-другому указать несколько команд для выполнения более сложного сценария:

cat <<EOF | docker exec --interactive boring_hawking sh
cd /var/log
tar -cv ./file.log
EOF