我想在容器内执行一些命令,但第二个命令不想在容器内执行,因此grep
在容器的主目录中找不到该文件。有人有同样的问题吗?
# Throughput
docker exec -i container_client bash << EOF >> mystatistics.xls
(sockperf throughput --tcp --msg-size=256 -i $ipaddcontainer -p 12345 -t 10)> my_output_file_troughput.txt
echo "Bridge mode" "," `grep 'BandWidth is ' my_output_file_troughput.txt | cut -d ' ' -f 5`
exit
EOF
答案1
当您使用here-docs时,您应该记住引用或不引用标记时的区别EOF
。如果没有 qoutes,任何命令替换都将在主 shell 中执行,而不是在 Docker 中。比较这两个:
$ cat <<EOF
$(echo ok)
EOF
ok
和:
$ cat <<"EOF"
$(echo ok)
EOF
$(echo ok)
因此,如果您想将命令(包括命令替换)传递给 Docker,则应该引用该令牌。
顺便一提,
- 顺便说一句,你为什么要使用子 shell
sockperf
? - 刻度已过时,新语法为
$()
。