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

我需要用 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个命令?

87883 次浏览

这样就得到了答案: < a href = “ https://stackoverflow. com/questions/26274326/Escape-role-in-Docker-command-line”> Escape 字符在 Docker 命令行中 最后我做了这个:

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

所以它的工作原理是,运行带有参数的 one bash 命令,这个参数就是我想要运行的两个命令。

如果其他人来这里为了这个令人敬畏的答案,但也想要一个更好的方式来解决 OP 的原始问题(OP 的 OP。.?)要从一个 docker 容器中复制一个文件,现在有一个 docker cp命令执行这个操作: https://docs.docker.com/engine/reference/commandline/cp/

很多时候,需要几个命令来改变工作目录,就像 OP 的问题一样。

为此,docker 现在有一个指定工作目录的 -w选项

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

对于那些无意中发现这个问题并且希望以不同方式指定多个命令以执行更复杂的脚本的人来说:

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