Different Values for MIX_ENV and config_env

Hello

I want to set config_env from .env file. I am trying to use config env variable from Dockerfile but i get wrong value. I have set MIX_ENV=prod in .env but i get :dev on config_env() other thing i also try System.get_env("MIX_ENV") where i get correct value.

.env file

export MIX_ENV=prod

docker-compose.yml

version: "3"

services:
  web:
    env_file:
      - .env
    build:
      context: "."
      args:
      - MIX_ENV=$MIX_ENV
    ports:
      - 4000:4000

Dockerfile


# Configure required environment
ARG MIX_ENV
ENV MIX_ENV=${MIX_ENV}

I might be wrong here. But inside .env file there should be no export. There should only be key=value lines

1 Like

I have also tried without export but it is the same.

I might also guess that you cannot reference env vars in compose file like you did. Ref article above

1 Like

Never seen env_file used in compose before :man_shrugging:

I hope someone else can give some (better?) tips :slight_smile: peace out

Since you’ve mentioned Dockerfile, I suppose you’re using a release. In that case, config_env/0 returns environment which was active at the moment when mix release run.

Suffer no more.
Here is how I would write the env variable in the docker compose file:

docker-compose.yml
------------------------------------------------------------------------------------------------------
xx some stuff goes here for the images and commands( the usual stuffs)
xx
xx

services:
  web:
    env_file:
        - .env
    build:
        context: "."
        args:
         - MIX_ENV=$MIX_ENV
    ports:
         - 4000:4000
   environment:
         MIX_ENV="what_ever_string_your_app_expect"
         ANOTHER_ENV_VAR="what_ever_string_your_app_expect"
         ANOTHER_ONE="DJKHALED"
         FOR_EXAMPLE_USERNAME="kigila"

I have been doing it this way since I learn docker compose.

I’m not at a computer so I can’t test this and therefore I might be wrong, but it looks to me like you’re defining your MIX_ENV twice, once from your .env file and then by setting args in your compose file.

You only need the .env file (assuming it’s using key=value pairs and the file is in the right place).