"docker exec" 명령의 출력을 포함하는 변수가 잘못 정렬되었습니다.

"docker exec" 명령의 출력을 포함하는 변수가 잘못 정렬되었습니다.

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 컨테이너의 출력에 문제가 있습니다. 그것이 무엇인지 확실하지 않습니다.1ifelse

또한 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그런 명령이 아닙니다.

관련 정보