docker exec에서 "내보내기"가 작동하지 않는 이유는 무엇입니까?

docker exec에서 "내보내기"가 작동하지 않는 이유는 무엇입니까?

/etc/profile.d/custom.sh및 에서 변수를 내보냈 습니다 ~/.bashrc. 실행하면 환경에서 사용할 수 있습니다 docker exec -i CONT_ID /bin/bash. 그러나 다른 명령을 실행하면 명령 환경에서 사용할 수 없습니다. 예, 그래서 이것을 시도했습니다:

docker exec -i "$MYCONTNAME" /bin/bash -c "source /etc/profile.d/custom.sh; echo $MYVAR"

이것은 작동하지 않습니다. 나는 심지어 시도했다:

docker exec -i "$MYCONTNAME" /bin/bash -c "export Y=123; echo Y=$Y"
docker exec -i "$MYCONTNAME" /bin/bash -c "export Y=123 && echo Y=$Y"

그러나 그것들도 작동하지 않습니다. 추가할 수는 있지만 ing 변수가 있는 쉘 스크립트 파일에 -e VARi=VALi있으므로 ( ) export를 사용하여 작동하게 할 수 있는 방법이 있습니까 ?/bin/bashsource /etc/profile.d/custom.sh

답변1

$MYVAR지휘 중

docker exec -i "$MYCONTNAME" /bin/bash -c "source /etc/profile.d/custom.sh; echo $MYVAR"

실행 전에 확장됩니다 /bin/bash -c(큰따옴표로 묶여 있기 때문).

대신 작은따옴표를 사용하세요.

docker exec -i "$MYCONTNAME" /bin/bash -c 'source /etc/profile.d/custom.sh; echo $MYVAR'

또는 (테스트되지 않음),

docker exec -i "$MYCONTNAME" /usr/bin/env BASH_ENV=/etc/profile.d/custom.sh /bin/bash -c 'echo $MYVAR'

BASH_ENV비대화형 셸(예: )을 시작할 때 설정 하면 bash -c셸이 명령을 실행하기 전에 이 변수가 가리키는 파일을 가져옵니다.

관련 정보