programing

도커 구성을 위해 환경 변수를 전달하는 방법

batch 2023. 8. 29. 20:17
반응형

도커 구성을 위해 환경 변수를 전달하는 방법

저는 컨테이너를 가동하려고 합니다.이미 개인 도커 레지스트리에 이미지를 업로드했습니다.이미지를 다운로드하여 배포할 작성 파일을 작성하고 싶습니다.하지만 저는 도커-콤포지 run 명령의 변수로 TAG 이름을 전달하고 싶습니다.제 작곡 파일은 아래와 같습니다.도커 합성 명령의 일부로 KB_DB_TAG_VERSION 값을 전달하려면 어떻게 해야 합니까?

version: '3'
services:
   db:
    #build: k-db
    user: "1000:50"
    volumes:
      - /data/mysql:/var/lib/mysql
    container_name: k-db
    environment:
      - MYSQL_ALLOW_EMPTY_PASSWORD=yes
    image:  XX:$KB_DB_TAG_VERSION
    image: k-db
    ports:
      - "3307:3306"

두 가지 옵션이 있습니다.

  1. 다른 답변에서 이미 제안한 대로 .env 파일을 생성합니다.
  2. 프레펜드KEY=VALUE짝을 지어주기docker-compose명령, 예:

    KB_DB_TAG_VERSION=kb-1.3.20-v1.0.0 docker-compose up
    

    스크립트의 이전 버전에서도 다음과 같이 내보낼 수 있습니다.

    export KB_DB_TAG_VERSION=kb-1.3.20-v1.0.0
    docker-compose up
    

실행할 디렉토리에 파일을 생성할 수 있습니다.docker-compose up명령(및 당신의docker-compose.yml파일 위치)에 다음 내용이 포함됩니다.

KB_DB_TAG_VERSION=kb-1.3.20-v1.0.0

당신의.docker-compose.yml파일은 다음과 같아야 합니다(추가됨).{그리고.}):

version: '3'
services:
   db:
     user: "1000:50"
     volumes:
       - /data/mysql:/var/lib/mysql
     container_name: k-db
     environment:
       - MYSQL_ALLOW_EMPTY_PASSWORD=yes
     image: XX:${KB_DB_TAG_VERSION}
     image: k-db
     ports:
       - "3307:3306"

위와 같이 변경 후에는 다음 명령을 사용하여 변경사항이 반영되었는지 확인합니다.docker-compose config변수가 변수 값으로 대체됩니다.변수 교체에 대한 자세한 내용은 여기 페이지를 참조하십시오.

단지 다른 사람들, 특히 @JakubKukul에 의해 윤곽이 드러난 것을 보완하기 위해.

보안을 위해 사용자 이름/암호와 같은 취약한 정보가 버전 제어 하에 있는 경우에는 도커 합성 파일에 보관하지 않을 수 있습니다.호스트에 있는 환경 변수를 컨테이너 내부의 환경 변수에 매핑할 수도 있습니다.이 경우 다음과 같은 것이 될 수 있습니다.

version: '3'
services:
   db:
    #build: k-db
    user: "1000:50"
    volumes:
      - /data/mysql:/var/lib/mysql
    container_name: k-db
    environment:
      - MYSQL_ALLOW_EMPTY_PASSWORD=yes
      - MYSQL_PASSWORD=${MYSQL_PASSWORD}
    image:  XX:$KB_DB_TAG_VERSION
    image: k-db
    ports:
      - "3307:3306"

어디에MYSQL_PASSWORD둘 다일 수 있습니다.

  1. 호스트의 환경 변수(현재 셸 세션에만 있을 수 있음)
  2. 컨테이너 내부의 환경 변수는db서비스

파일에 값을 지정하지 않고도 환경 변수를 명령줄의 컨테이너에 전달할 수 있습니다.추가 anenvironment도커 지정 파일의 컨테이너 서비스 정의에 변수 이름만 있는 키(값 또는 할당 연산자 없음):

db:
    ...
    environment:
        - KB_DB_TAG_VERSION

할당되지 않은 상태에서 이러한 방식으로 사용하면 도커 컴포지트가 현재 환경/쉘에서 환경 변수를 조회합니다.

KB_DB_TAG_VERSION=mytagversion docker-compose up

참조: https://docs.docker.com/compose/environment-variables/ #pass-environment-to-containers

docker-compose  --env-file .\.env up

https://docs.docker.com/compose/environment-variables/

Windows의 경우 내보내기 대신 다음을 사용합니다.

$env.KB_DB_TAG_VERSION = "1.3.20-v1.0.0"
docker-compose up

도커-compose.yml 파일에 추가합니다.

env_file:
  - .env_file

의 신에게에.dbservice 여기서 .env_file은 .env 파일입니다(그에 따라 이름 변경).

version: '3'
services:
   db:
    #build: k-db
    user: "1000:50"
    volumes:
      - /data/mysql:/var/lib/mysql
    container_name: k-db
    env_file:
      - .env_file
    environment:
      - MYSQL_ALLOW_EMPTY_PASSWORD=yes
    image:  XX:$KB_DB_TAG_VERSION
    image: k-db
    ports:
      - "3307:3306"

언급URL : https://stackoverflow.com/questions/49293967/how-to-pass-environment-variable-to-docker-compose-up

반응형