볼륨 섹션에서 Docker Compose 환경 변수를 사용하는 방법이 있나요?
이 구성을 사용했지만 작동하지 않습니다.
SampleContainer:
image: myImage:latest
container_name: sample
depends_on:
- mysql-server
restart: always
environment:
- 'SERVER_NAME=jingool'
volumes:
- /opt/docker/myapplication/bootstrap.properties:/opt/myserver/${SERVER_NAME}/bootstrap.properties
내 문제는 jingool
디렉터리가 볼륨에 정의되어 있지 않다는 것입니다.
이 문제를 어떻게 해결할 수 있나요?
답변1
.env
쓰기용 글로벌 환경을 읽기용으로 배치한 파일을 사용해야 합니다 .
바라보다:https://docs.docker.com/compose/environment-variables/#the-env-file이 파일을 사용하는 방법에 대한 자세한 내용.
다른가능한 해결 방법은 template.yml
호출 파일을 사용하는 것 입니다 docker-compose
. 예를 들면 다음과 같습니다.
- 하나를 생성하면
template.yml
이것이docker-compose.yml
환경 변수입니다. env.sh
환경 변수가 " " 파일에 있다고 가정합니다 .- sh 파일에 다음 코드를 넣고 실행해 보세요.
source env.sh; rm -rf docker-compose.yml; envsubst < "template.yml" > "docker-compose.yml";
docker-compose.yml
올바른 환경 변수 값을 사용하여 새 파일이 생성됩니다.
template.yml 파일 예:
SampleContainer:
image: myImage:latest
container_name: sample
depends_on:
- mysql-server
restart: always
volumes:
- /opt/docker/myapplication/bootstrap.properties:/opt/myserver/${SERVER_NAME}/bootstrap.properties
샘플 env.sh
파일:
#!/bin/bash
export SERVER_NAME=jingool
기타 옵션은 다음과 같습니다.
docker-compose
1.5+에는 변수 대체가 활성화되어 있습니다.https://github.com/docker/compose/releases
최신 Docker Compose를 사용하면 Compose 파일에서 환경 변수에 액세스할 수 있습니다. 따라서 환경 변수를 가져온 다음 다음과 같이 Compose를 실행할 수 있습니다.
set -a
source .my-env
docker-compose up -d
docker-compose.yml
그런 다음 다음과 같이 변수를 참조할 수 있습니다 ${VARIABLE}
.
/opt/docker/myapplication/bootstrap.properties:/opt/myserver/${SERVER_NAME}/bootstrap.properties
여기에서 가져온 문서의 자세한 정보는 다음과 같습니다.https://docs.docker.com/compose/compose-file/#variable-substitution
BASH 방식:
이는 .env
bash 스크립트와 파일을 사용하는 보다 유연한 방법입니다.
예시 .env
파일:
EXAMPLE_URL=http://example.com
# Note that the variable below is commented out and will not be used:
# EXAMPLE_URL=http://example2.com
SECRET_KEY=ABDFWEDFSADFWWEFSFSDFM
# You can even define the compose file in an env variable like so:
COMPOSE_CONFIG=my-compose-file.yml
# You can define other compose files, and just comment them out
# when not needed:
# COMPOSE_CONFIG=another-compose-file.yml
그런 다음 동일한 디렉터리에서 이 bash 스크립트를 실행하면 모든 것이 올바르게 배포됩니다.
#!/bin/bash
docker rm -f `docker ps -aq -f name=myproject_*`
set -a
source .env
cat ${COMPOSE_CONFIG} | envsubst | docker-compose -f - -p "myproject" up -d
또 다른 흥미로운 내용은 다음과 같습니다.https://modulitos.com/2016/03/lets-deploy-part-1/