docker exec bash -c
조건문에 사용될 내용을 에코하여 컨테이너 대신 호스트에 출력을 저장하면서 Docker 컨테이너 내에서 bash를 실행하려고 합니다 . IP 호스트 이름이나 문자열과 같은 내용을 다시 에코할 수 있습니다. 문제는 echo
출력입니다.
$ var1=$(docker exec -t test_masternode1 bash -c 'echo 1')
$ echo $var1
1
$ declare -p var1
"eclare -- var1="1
$ var2=1
$ declare -p var2
declare -- var2="1"
$ echo $var2
1
$ if [ "$var1" == "$var2" ];then echo "same";else echo "not same";fi
not same
보시다시피 var1
와 는 둘 다 있지만 var2
테스트 는 실패합니다. 또한 변수 선언 출력이 잘못 정렬되었습니다. Docker 컨테이너의 출력에 문제가 있습니다. 그것이 무엇인지 확실하지 않습니다.1
if
else
또한 Ubuntu에서 다른 Docker 이미지를 사용해 보았습니다. 위의 예는 CentOS 7의 예입니다.
$ var3=`docker run -t ubuntu bash -c 'echo 1'`
$ declare -p var3
"eclare -- var3="1
답변1
데이터는 Docker에서 캐리지 리턴으로 반환됩니다. 캐리지 리턴 문자가 출력되면 커서가 줄의 시작 부분으로 이동합니다. 그래서 변수의 값을 표시하면 출력이 조금 이상해 보입니다. 이것은 다른 사람들에게도 문제가 되는 것 같습니다(또는 과거에 있었습니다).이 GitHub 문제.
데이터에서 캐리지 리턴을 제거하려면 다음으로 전달하십시오 tr -d '\r'
.
var1=$(docker exec -t test_masternode1 bash -c 'echo 1' | tr -d '\r')
...또는 옵션 없이 명령을 실행하세요 -t
. 이 -t
옵션은 대화형 명령에만 실제로 필요한 의사 TTY를 docker exec
할당합니다 . docker run
이 명령은 echo 1
그런 명령이 아닙니다.