컨테이너 내부에서 일부 명령을 실행하고 싶지만 두 번째 명령은 컨테이너 내부에서 실행되기를 원하지 않으므로 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가 없으면 모든 명령 대체는 Docker가 아닌 기본 셸에서 수행됩니다. 다음 두 가지를 비교하십시오.
$ cat <<EOF
$(echo ok)
EOF
ok
그리고:
$ cat <<"EOF"
$(echo ok)
EOF
$(echo ok)
따라서 명령(명령 대체 포함)을 Docker에 전달하려면 이 토큰을 참조해야 합니다.
그런데,
- 그런데 왜 subshell을 사용하고 싶나요
sockperf
? - 진드기는 더 이상 사용되지 않으며 새 구문은 입니다
$()
.