bash 변수를 다른 애플리케이션에 전달

bash 변수를 다른 애플리케이션에 전달

파일에서 일부 값을 읽어서 bash변수에 저장한 후 docker그 값을 환경 변수로 전달하여 실행하려고 합니다. 파일은 다음과 같이 구성됩니다.

DB_NAME=db
ROOT_PASS=root123
USER_NAME=dev
USER_PASS=dev123

코드는 다음과 같습니다.

ROOT_PASS=$(sed -nr '/ROOT_PASS=(\d*)/p' .env | cut -d '=' -f 2)
USER_NAME=$(sed -nr '/USER_NAME=(\d*)/p' .env | cut -d '=' -f 2)
USER_PASS=$(sed -nr '/USER_PASS=(\d*)/p' .env | cut -d '=' -f 2)
DB_NAME=$(sed -nr '/DB_NAME=(\d*)/p' .env | cut -d '=' -f 2)


echo -e $USER_NAME
echo -e $USER_PASS
echo -e $DB_NAME
docker volume ls


docker run --rm \
  --name init-mysql \
  -v mysql-data:/var/lib/mysql \
  -e MYSQL_ROOT_PASSWORD=$ROOT_PASS \
  -e MYSQL_USER=$USER_NAME \
  -e MYSQL_PASSWORD=$USER_PASS \
  -e MYSQL_DATABASE=$DB_NAME \
  -d mysql:latest 
  && docker exec init-mysql echo $MYSQL_ROOT_PASSWORD

이 스크립트를 실행한 결과 $MYSQL_ROOT_PASSWORD화면에 값이 인쇄될 것으로 예상했지만 빈 줄만 표시됩니다(따라서 사용자에게는 root빈 비밀번호가 있습니다). 내가 뭘 잘못했나요? bash 변수의 값을 docker환경 변수에 어떻게 전달해야 합니까?

추신: 알아요 docker-compose.yml. 하지만 여기서는 이 방법을 사용해야 합니다.

답변1

그것은 나를 위해 작동하는 것 같습니다 :

ROOT_PASS=$(sed -nr '/ROOT_PASS=(\d*)/p' .env | cut -d '=' -f 2)
echo $ROOT_PASS 
root123

set -xdocker 명령으로 실행된 xtrace()를 표시합니다.

파일 구조가 즉각적인 source실행을 허용하는데 왜 안 될까요? 또한 allexportdocker가 변수를 상속하도록 변수를 할당할 때 자동으로 환경으로 내보내는 옵션을 미리 설정 해야 합니다 .

$ set -o allexport
$ . ./.env
$ echo "$ROOT_PASS"
root123
$ echo "$USER_NAME"
dev
$ printenv USER_NAME
dev
$ echo "$USER_PASS"
dev123

관련 정보