docker-compose.yml 환경이 .env 파일 콘텐츠를 덮어쓰는 이유는 무엇입니까?

docker-compose.yml 환경이 .env 파일 콘텐츠를 덮어쓰는 이유는 무엇입니까?

설정을 사용하는 도커 컨테이너가 있고 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의 환경 변수 우선 순위):

  1. docker compose run -e명령줄에서 사용을 설정합니다.
  2. 쉘에서 교체하십시오.
  3. environment작성 파일의 속성을 사용하여 설정합니다.
  4. --env-file명령줄에서 매개변수를 사용합니다.
  5. env_file작성 파일에서 이 속성을 사용합니다.
  6. .env프로젝트 디렉토리 하단에 있는 파일을 사용하여 설정하세요.
  7. 지시어의 컨테이너 이미지에 설정합니다 ENV. 설정은 Docker Compose 항목이 포함 ARG되거나 포함되지 않은 경우 ENV에만 평가됩니다 .Dockerfileenvironmentenv_filerun --env

environment이는 작성 파일에 설정한 환경 변수가 .env파일에서 동일한 이름을 가진 모든 변수를 재정의한다는 것을 의미합니다.

또한 여러 작성 파일을 사용할 수 있으며 나중에 명령줄에 지정된 파일은 이전에 지정된 파일을 덮어씁니다. 따라서 이 파일에는 나중에 하나 이상의 작성 파일에서 재정의할 수 있는 .env가장 일반적인 값(물론 더 일반적인 값)이 포함되어 있다는 아이디어입니다 . Dockerfile이러한 보다 구체적인 값은 명령줄에서 새 값을 지정하여 재정의할 수도 있습니다(예: 일회성 배포 또는 테스트용).

관련 정보