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_file
yaml 내의 환경변수를 파일에서 가져와 컨테이너에 주입합니다.어플리케이션에는 표시되지만 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
'programing' 카테고리의 다른 글
폼 7 AJAX 콜백 문의 (0) | 2023.03.19 |
---|---|
TypeScript에서 날짜/시간을 포맷하려면 어떻게 해야 합니까? (0) | 2023.03.19 |
Google Chrome은 JSON AJAX 응답을 일반 텍스트가 아닌 트리로 표시합니다. (0) | 2023.03.19 |
jQuery.ajax 처리 계속 응답: "success:" vs.done? (0) | 2023.03.19 |
Json에서 Protobuf로 변환하는 방법? (0) | 2023.03.14 |