How to use environment variables in docker compose

后端 未结 13 734
孤街浪徒
孤街浪徒 2020-11-28 01:02

I would like to be able to use env variables inside docker-compose.yml, with values passed in at the time of docker-compose up. This is the example.

I am

相关标签:
13条回答
  • 2020-11-28 01:06

    It seems that docker-compose has native support now for default environment variables in file.

    all you need to do is declare your variables in a file named .env and they will be available in docker-compose.yml.

    For example, for .env file with contents:

    MY_SECRET_KEY=SOME_SECRET
    IMAGE_NAME=docker_image
    

    You could access your variable inside docker-compose.yml or forward them into the container:

    my-service:
      image: ${IMAGE_NAME}
      environment:
        MY_SECRET_KEY: ${MY_SECRET_KEY}
    
    0 讨论(0)
  • 2020-11-28 01:06

    The following is applicable for docker-compose 3.x Set environment variables inside the container

    method - 1 Straight method

    web:
      environment:
        - DEBUG=1
          POSTGRES_PASSWORD: 'postgres'
          POSTGRES_USER: 'postgres'
    

    method - 2 The “.env” file

    Create a .env file in the same location as the docker-compose.yml

    $ cat .env
    TAG=v1.5
    POSTGRES_PASSWORD: 'postgres'
    

    and your compose file will be like

    $ cat docker-compose.yml
    version: '3'
    services:
      web:
        image: "webapp:${TAG}"
        postgres_password: "${POSTGRES_PASSWORD}"
    

    source

    0 讨论(0)
  • 2020-11-28 01:08

    The best way is to specify environment variables outside the docker-compose.yml file. You can use env_file setting, and define your environment file within the same line. Then doing a docker-compose up again should recreate the containers with the new environment variables.

    Here is how my docker-compose.yml looks like:

    services:
      web:
        env_file: variables.env
    

    Note: docker-compose expects each line in an env file to be in VAR=VAL format. Avoid using export inside the .env file. Also, the .env file should be placed in the folder where the docker-compose command is executed.

    0 讨论(0)
  • 2020-11-28 01:08

    As far as I know, this is a work-in-progress. They want to do it, but it's not released yet. See 1377 (the "new" 495 that was mentioned by @Andy).

    I ended up implementing the "generate .yml as part of CI" approach as proposed by @Thomas.

    0 讨论(0)
  • 2020-11-28 01:09

    Since 1.25.4, docker-compose supports the option --env-file that enables you to specify a file containing variables.

    Yours should look like this:

    hostname=my-host-name
    

    And the command:

    docker-compose --env-file /path/to/my-env-file config
    
    0 讨论(0)
  • 2020-11-28 01:11

    Use .env file to define dynamic values in docker-compse.yml. Be it port or any other value.

    Sample docker-compose:

    testcore.web:
           image: xxxxxxxxxxxxxxx.dkr.ecr.ap-northeast-2.amazonaws.com/testcore:latest
           volumes: 
                - c:/logs:c:/logs
           ports:
                - ${TEST_CORE_PORT}:80
           environment:
                - CONSUL_URL=http://${CONSUL_IP}:8500 
                - HOST=${HOST_ADDRESS}:${TEST_CORE_PORT}
    

    Inside .env file you can define the value of these variables:

    CONSUL_IP=172.31.28.151
    HOST_ADDRESS=172.31.16.221
    TEST_CORE_PORT=10002
    
    0 讨论(0)
提交回复
热议问题