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環境変数に渡すにはどうすればよいですか?

PS:わかりました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

おすすめ記事