$ docker-compose version
docker-compose version 1.8.1, build 878cff1
docker-py version: 1.10.3
CPython version: 2.7.9
OpenSSL version: OpenSSL 1.0.1e 11 Feb 2013
Here's how my docker-compose.yml file looks like:
parse-server:
image: 94fc5293168d
restart: always
env_file: config.env
ports:
- "1337:1337"
environment:
PORT: 1337
DATABASE_URI: $DATABASE_URI
APP_ID: $APP_ID
MASTER_KEY: $MASTER_KEY
......
However, when I run docker-compose up -d, Compose doesn't expose variables from config.env to environment variables.
Curious, when I remove env_file: config.env and rename config.env to .env, everything works just fine.
PS: env_file: ./config.env doesn't work either.
I think that's exactly the behaviour the environment variable documentation describes. If you want to use the environment variables from config.env inside of the docker-compose.yml file, you have to use the .env file.
The way you're using the env_file parameter passes environment variables directly to the Dockerfile, where you can use them.
Please correct me if I'm wrong.. ;)
@robertaistleitner Looks like you right. Can anybody confirm this?
If env_file and .env are unrelated, it confuses people. See this:
The docs say you can specify you're own env-file or even multiple files, however I could not get that working. It always wanted to choose the .env file.
Environment variables have become unfortunately loaded and ambiguous when dealing with Compose. This is why we recently added a disambiguation page to our documentation that should help with those cases. If you have any suggestion to improve it however, we gladly welcome pull requests.
To summarize:
.env file.env_file files and values described in the environment section of the service.HTH.
Are there any plans to allow specifying variable values in docker-compose command line?
You can easily add environment variables by defining them before the docker-compose command like this
ENVVAR=ENVVAL docker-compose up
@robertaistleitner: That's very useful, thanks for sharing it.
The use is as a list, not just 1 file:
my-service:
env_file:
- <env file>
@matthias-p-nowak The first example at https://docs.docker.com/compose/compose-file/compose-file-v2/#env_file has just one file, no list:
env_file: .env
original confusion returns
so wait. use case. I have a graphql.env file that configures the graphql port. And in docker-compose.yml I need to expose the port used my graphql, so what you're telling me is that I cannot use graphql.env env file to specify which port I want to expose, but I need yet another .env file and I need to maintain both of them and make sure they're both using the same PORT value in both of them just to make sure docker-compose gets it righ?
Have you guys gone insane?
Most helpful comment
Environment variables have become unfortunately loaded and ambiguous when dealing with Compose. This is why we recently added a disambiguation page to our documentation that should help with those cases. If you have any suggestion to improve it however, we gladly welcome pull requests.
To summarize:
.envfile.env_filefiles and values described in theenvironmentsection of the service.HTH.