Docker Compose는 볼륨에서 환경 변수를 사용합니다.

Docker Compose는 볼륨에서 환경 변수를 사용합니다.

볼륨 섹션에서 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-compose1.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 방식:

이는 .envbash 스크립트와 파일을 사용하는 보다 유연한 방법입니다.

예시 .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/

관련 정보