programing

docker-compose.yml에서 env_file을 명확하게 선언해야 하는 이유는 무엇입니까?

cafebook 2023. 3. 19. 18:28
반응형

docker-compose.yml에서 env_file을 명확하게 선언해야 하는 이유는 무엇입니까?

Wordpress 이미지를 확장하여 XDebug, PHPunit, 작곡가 및 phpcs를 추가했습니다.

프로젝트 루트는 다음과 같습니다.

도커 워드프레스도커 파일docker-param.yml.env

docker-timeout.yml:

version: '3.7'

services:
   db:
     image: mysql:5.7
     volumes:
       - ./docker-mysql/db_data:/var/lib/mysql
     restart: always
     ports:
       - "3306:3306"
     env_file: .env

   wordpress:
     depends_on:
       - db
     image: progonkpa/mywordpress
     ports:
       - "80:80"
       - "443:443"
     restart: always
     volumes:
       - ./src:/var/www/html
     env_file: .env

volumes:
    db_data:

이 설정은 기능하지만 env_file 선언을 자세히 추가했기 때문에 올바른 규칙: .env file in root을 따르면 Docker가 자동으로 파일을 픽업한다고 생각했습니다.

실제로 docker-compose.yml의 env_file 선언을 삭제하고 싶은데 몇 가지 문제가 발생합니다.

MySQL 컨테이너 로그:

database is uninitialized and password option is not specified
You need to specify one of MYSQL_ROOT_PASSWORD

컨테이너 초기화 시 첫 번째 실행 시 mysql 관련 변수가 전달되지 않는 것 같습니다..env 파일에는 일반적인 Wordpress 변수와 MySQL 변수가 저장됩니다.

MYSQL_DATABASE=wordpress
MYSQL_USER=wordpress
MYSQL_PASSWORD=wordpress
MYSQL_ROOT_PASSWORD=wordpress
WORDPRESS_DB_HOST=db:3306
WORDPRESS_DB_USER=wordpress
WORDPRESS_DB_PASSWORD=wordpress

그럼 왜 변수가 컨테이너에 도달하지 않는 거죠?

여기서 변수를 사용할 수 있는 장소는 2개 있습니다.합성 파일 자체 내부와 에 의해 작성된 컨테이너 내부입니다.docker-compose.

.env파일이 사용됩니다.docker-compose환경을 조정하다docker-compose명령어를 사용합니다.이 기능은 확장해야 하는 yaml 파일 내의 변수 또는 구성 자체에서 사용되는 변수에 유용합니다.후자의 상세한 것에 대하여는, 「CLI 변수 작성 문서」를 참조해 주세요.

정의env_fileyaml 내의 환경변수를 파일에서 가져와 컨테이너에 주입합니다.어플리케이션에는 표시되지만 yaml 내의 원하는 변수에는 사용할 수 없습니다.docker-compose그 변수 확장이 그 전에 일어나기 때문에 확장해야 한다.env_file내용이 해석됩니다.

Docker-Composure는 모든 것을 명시적으로 정의해야 합니다.docker run parameter이러한 설정 또는 파라미터는 도커 파일 내에 정의되어 있는 각 컨테이너에만 적용됩니다.

따라서 이미 Dockerfile로 선언되어 있는 경우에는 ENV를 덮어쓰지 않도록 해야 합니다.따라서 이러한 구성을 스스로 명시적으로 정의해야 합니다.

도커를 빌드할 때 도커 이미지에 몇 가지 기본 구성을 설정하지만docker run command그리고.docker-compose이미지를 컨테이너로 시작할 때 변경사항이 적용되도록 재정의하는 기능을 제공합니다.

서비스 정의에는 도커 컨테이너 작성에 명령줄 매개 변수를 전달하는 것과 마찬가지로 해당 서비스에 대해 시작된 각 컨테이너에 적용되는 구성이 포함됩니다.마찬가지로 네트워크 및 볼륨 정의는 도커 네트워크 생성 및 도커 볼륨 생성과 유사합니다.

파일 작성

env_file

파일에서 환경 변수를 추가합니다.단일 값 또는 목록일 수 있습니다.

[ Compose file ]를 사용하여 [를한 docker-compose -f FILE의 , 「」env_file는 파일이 있는 디렉토리에 상대적입니다.

환경 섹션에서 선언된 환경 변수는 이러한 값을 덮어씁니다. 이러한 값이 비어 있거나 정의되지 않은 경우에도 마찬가지입니다.

env_file: .env

언급URL : https://stackoverflow.com/questions/58047984/why-do-i-need-to-declare-env-file-explicitely-in-docker-compose-yml

반응형