設定を使用するドッカーコンテナがあり、docker-compose.yml
ここにいくつかの環境変数が導入されました。
environment:
- AUTH_SECRET=some_secret
その後、私のファイルには次の値があります.env
。
AUTH_SECRET=another_secret
問題は私のQwikアプリケーションで.env
ファイルがdocker-compose.yml
。
人々は期待するでしょう詳細取り扱うべき項目あまり具体的ではなく、より一般的です。オペレーティングシステム
これは私のコードです。
import { serverAuth$ } from '@builder.io/qwik-auth'
import type { Provider } from '@auth/core/providers'
import Keycloak from '@auth/core/providers/keycloak'
export const { onRequest, useAuthSession, useAuthSignin, useAuthSignout } = serverAuth$(
({ env }) => ({
secret: env.get("AUTH_SECRET"),
trustHost: true,
callbacks: {
async session({
session,
token,
}){
session.user.guid = token.sub
return session
}
},
providers: [
Keycloak({
clientId: 'Site',
clientSecret: env.get('KEYCLOAK_CLIENT_SECRET') as string,
issuer: env.get('KEYCLOAK_ISSUER') as string
}),
] as Provider[],
})
);
私のコードでは、代わりsome_scerent
にが表示されますanother_secret
。
この動作は正常ですか?特定のアプリケーションでシステム全体の環境変数をどのようにオーバーライドできますか?
答え1
Docker Composeに書き込まれる環境変数の優先順位は次のとおりです(ほとんどからコピーされます)。Docker Composeの環境変数の優先順位):
docker compose run -e
コマンドラインで使用を設定します。- シェルで交換してください。
environment
作成ファイルのプロパティを使用して設定します。--env-file
コマンドラインでパラメータを使用します。env_file
作成ファイルでこのプロパティを使用します。.env
プロジェクトディレクトリの下部にあるファイルを使用して設定します。- ディレクティブのコンテナイメージに設定します
ENV
。設定は、Docker Composeエントリが含まれてARG
いるか含まれていない場合ENV
にのみ評価されます。Dockerfile
environment
env_file
run --env
environment
これは、作成ファイルに設定した環境変数が、ファイル.env
内の同じ名前を持つすべての変数をオーバーライドすることを意味します。
また、複数の作成ファイルを使用でき、後でコマンドラインで指定されたファイルは以前に指定されたファイルを上書きします。したがって、このファイルには、後で1つ以上の作成ファイルでオーバーライドできる最も.env
一般的な値(もちろんより一般的な値)が含まれているというアイデアです。Dockerfile
これらのより具体的な値は、コマンドラインで新しい値を指定して上書きすることもできます(たとえば、ワンタイム展開またはテスト用)。