${var}
파일 의 자리 표시자를 파일(docker)에서 로드된 환경 변수로 바꾸고 싶습니다. 내가 선택한 구문은 docker-compose와 일치합니다.nginx.conf
.env
${var}
- 콘텐츠
.env
파일:DOMAIN_NAME=sub.domain.net DB_USER=admin ...
예를 들어, 이 줄에서 sed
문자열 교체를 수행하면 머리가 아프게 됩니다.
- 텍스트 입력:
server_name ${DOMAIN_NAME};
- 주문하다:
source .env export DOMAIN_NAME sed -i "s/\${DOMAIN_NAME}/$DOMAIN_NAME/g" "$docker_root"/nginx/nginx.conf
- 원하는 결과:
server_name sub.domain.net;
- 하지만 내가 얻는 것은 다음과 같습니다.
server_name sub.domain.net ;
교체 후에 무슨 일이 일어나든 상관없습니다 ${var}
. 자리 표시자 뒤에 공백과 단어를 추가하면 해당 단어가 두 번째 줄에도 나타납니다.
나는 envsubst
같은 행동을 먼저 사용하고 보았습니다. 그런 다음 나는 sed
wich와 동일한 작업을 시도했습니다. :)
나는 다양한 이스케이프 슬래시, 작은 따옴표 및 큰 따옴표를 시도했지만 결과가 없었습니다.
여기서 무슨 일이 일어나고 있는 걸까요?
답변1
Windows에서 작업할 때 문제는 파일의 Windows 스타일 CRLF(캐리지 리턴, 줄 바꿈) 줄 끝입니다.
Steeldriver가 지적한 의견에 대한 응답으로
dos2unix를 사용하여 파일을 CRLF에서 LF(linux 및 mac)로 변환했습니다.
apt install dos2unix
find . -type f -print0 | xargs -0 dos2unix
시작점은 NGINX 자리 표시자를 docker .env 파일 변수로 바꾸는 것입니다. envsubst를 사용하는 NGINX의 내장 메커니즘이 작동하지 않습니다. 이 사람들도 같은 문제를 겪었어요.
일반적인 사용의 경우 지침을 따르십시오.여기.