Как запустить 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