Saša Vranić
Saša Vranić

Reputation: 113

Dockerfile - use environment variable from env file

I have a docker compose setup where I want to use environment variables from env file in my dockerfile. I want to use these variables during the build time since I use this version number in concatenating the string in order to form a download URL.

Here I wrote part of the files I'm using just to keep the focus on the point of my question.

.env

MY_APP_VER=v1.2.3

docker-compose.yml

version: "2"
services:
  my-app:
    build: .
    container_name: my_app
    environment:
      - my_app_version=$MY_APP_VER

Dockerfile

FROM scratch
ENV my_app_ver=$my_app_version
RUN echo $my_app_ver

I have checked various sources but without any success. I'm not sure if this is even possible or am I using the wrong syntax (should I use quotes or no e.g. "$my_app_ver" or curly brackets ${my_app_ver}).

Upvotes: 0

Views: 3151

Answers (2)

CyberEternal
CyberEternal

Reputation: 2545

For version 3.8 you can do it in the following way

version: '3.8'

services:
  my-app:
    build: .
    ports:
      - ${CONTAINER_PORT}:${PORT} # for example
    env_file: .env
    container_name: my-app-${NODE_ENV} # for example
    environment: 
      MYSQL_DATABASE: ${DB_NAME} # for example
      my_app_version: ${MY_APP_VER} # for your case

Find more information in documentation

Also, you can find more information about the usage of env variables in Dockerfile and docker-compose here

Upvotes: 3

Marco
Marco

Reputation: 23937

There is an option called env-file in docker-compose, that you can leverage: https://docs.docker.com/compose/environment-variables/#the-env_file-configuration-option

version: "3"
services:
  my-app:
    build: .
    container_name: my_app
    env_file:
    - .env.dev

Be aware, that the .env file is loaded by default, if it is present in the current context. So you only have to use env_file, if it is named differently or is in a different folder.

Upvotes: 0

Related Questions