我需要使用docker exec运行2个命令.我正在从docker容器中复制一个文件,并且不想处理使用ssh之类的凭据.此命令复制文件:
sudo docker exec boring_hawking tar -cv /var/log/file.log | tar -x
Run Code Online (Sandbox Code Playgroud)
但是它创建了一个子目录var/log,我想避免这样做,所以如果我能在docker容器中做这些,我应该是好的:
cd /var/log ; tar -cv ./file.log
Run Code Online (Sandbox Code Playgroud)
如何让docker exec运行2个命令?
Sol*_*olx 104
这导致了答案: Docker命令行中的Escape字符 我最终做到了这样:
sudo docker exec boring_hawking bash -c 'cd /var/log ; tar -cv ./file.log' | tar -x
Run Code Online (Sandbox Code Playgroud)
因此,它运行一个bash命令,其参数是我想要运行的2个命令.
zbr*_*son 21
对于偶然发现此问题并希望以不同方式指定多个命令以执行更复杂脚本的其他任何人:
cat <<EOF | docker exec --interactive boring_hawking sh
cd /var/log
tar -cv ./file.log
EOF
Run Code Online (Sandbox Code Playgroud)
P-G*_*-Gn 19
通常,需要几个命令就是改变工作目录 - 就像OP的问题一样.
为此,docker现在可以-w
选择指定工作目录.例如,在本案中
docker exec -w /var/log boring_hawking tar -cv ./file.log
Run Code Online (Sandbox Code Playgroud)
小智 6
如果有其他人来这里寻求很棒的答案,但还希望有一种更好的方法来解决OP的原始问题(OP的OP ..?),将文件从Docker容器中复制出来,现在有一个docker cp
命令可以执行此操作:https: //docs.docker.com/engine/reference/commandline/cp/
归档时间: |
|
查看次数: |
43796 次 |
最近记录: |