dockerdocker-composedockerfileenvironment-variables

How to pass environment variable to docker-compose up


I am trying to run a container. I already have the image uploaded to private Docker registry. I want to write a compose file to download and deploy the image. But I want to pass the TAG name as a variable from the docker-compose run command.My compose file looks like below. How can I pass the value for KB_DB_TAG_VERSION as part of docker-compose up command?

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"

Solution

  • You have two options (option 2. overrides 1.):

    1. Create the .env file as already suggested in another answer.

    2. Prepend KEY=VALUE pair(s) to your docker-compose command, e.g:

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

      Exporting it earlier in a script should also work, e.g.:

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

    Keep in mind that these options just pass an environment varible to the docker-compose.yml file, not to a container. For an environment variable to be actually passed to a container you always need something like this in your docker-compose.yml:

      environment:
        - KB_DB_TAG_VERSION=$KB_DB_TAG_VERSION