如何使用docker exec运行2个命令


84

我需要使用docker exec运行2个命令。我正在从Docker容器中复制文件,并且不想使用ssh之类的凭据进行处理。此命令复制文件:

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

但是它创建了一个子目录var / log,我想避免这种情况,所以如果我可以在docker容器中做这些事情,那我会很好:

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

如何使docker exec运行2个命令?

Answers:


136

这导致了答案: Docker命令行中的转义符 我最终这样做:

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

因此,它可以通过运行一个bash命令(其参数为我要运行的2个命令)来工作。


非常感谢您,这对我有很大帮助
-UnSaid

如果你已经得到了命令内部双引号,那么你可以做这样-c "cd /var/log; tar -cv \"$1\""如果文件是在参数1
捷思

27

通常,需要几个命令来更改工作目录,就像OP的问题一样。

为此,泊坞窗现在可以-w选择指定工作目录。例如在本案中

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

确实有用,这是要走的路。
TortelliEngineer

这正是我想要的!
克莱·米切尔

11

对于偶然发现此问题并希望以其他方式指定多个命令以执行更复杂的脚本的任何人:

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

当您要执行更复杂的脚本时,这是一个很好的可读解决方案。它值得更多投票;)
Slava Fomin II

我在the input device is not a TTY使用此方法时遇到错误
Roy Shilkrot

--interactive应该照顾的是,如果不是,那么我不知道什么是要去不会对你如何使用这个更广阔的背景情况。
zbrunson

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.