我需要使用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个命令?
答案 0 :(得分:91)
这导致答案:Escape character in Docker command line 我最终这样做了:
sudo docker exec boring_hawking bash -c 'cd /var/log ; tar -cv ./file.log' | tar -x
因此,它运行一个bash命令,其参数是我想要运行的2个命令。
答案 1 :(得分:11)
通常,需要几个命令才能更改工作目录 - 就像OP的问题一样。
为此,docker现在有一个-w
选项来指定工作目录。例如。在本案中
docker exec -w /var/log boring_hawking tar -cv ./file.log
答案 2 :(得分:3)
如果有其他人来到这里获得了很棒的答案,但也想要一个更好的方法来解决OP的原始问题(OP的OP ..?)从docker容器中复制文件,那么现在有一个docker cp
命令将执行此操作:https://docs.docker.com/engine/reference/commandline/cp/
答案 3 :(得分:3)
对于偶然发现此问题并希望以其他方式指定多个命令以执行更复杂的脚本的其他人:
cat <<EOF | docker exec --interactive boring_hawking sh
cd /var/log
tar -cv ./file.log
EOF