Stack Overflow Asked by fnet on October 25, 2020
I am using Visual Studio Code to run a docker container and passing my environment variables as a file.
I am trying to format a string dynamically from other environmental variables and having trouble resolving the string.
I am able to build the container and debug terminal tab shows no problems.
I am currently not using docker-compose.yml
, but rather the Visual Studio .devcontainer
settings.
devcontainer.json
...
"runArgs": [
"--env-file", "${localWorkspaceFolder}/.env.dev"
,
...
.env.dev
DATABASE_DATABASE=database
DATABASE_USER=user
DATABASE_PASSWORD=password
DATABASE_HOST=localhost
DATABASE_PORT=5432
DATABASE_DRIVER=postgresql
CONNECTION_STRING=${DATABASE_DRIVER}://${DATABASE_USER}:${DATABASE_PASSWORD}@${DATABASE_HOST}:${DATABASE_PORT}/${DATABASE_DATABASE}
When I type env
into bash it displays:
DATABASE_DATABASE=database
DATABASE_USER=user
DATABASE_PASSWORD=password
DATABASE_HOST=localhost
DATABASE_PORT=5432
DATABASE_DRIVER=postgresql
CONNECTION_STRING=${DATABASE_DRIVER}://${DATABASE_USER}:${DATABASE_PASSWORD}@${DATABASE_HOST}:${DATABASE_PORT}/${DATABASE_DATABASE}
Where I would expect it to display:
DATABASE_DATABASE=database
DATABASE_USER=user
DATABASE_PASSWORD=password
DATABASE_HOST=localhost
DATABASE_PORT=5432
DATABASE_DRIVER=postgresql
CONNECTION_STRING=postgresql://user:password@$localhost:5432/database
Is ${VARIABLE_NAME}
not the correct syntax?
Setting env variables from files works differently than setting them in a terminal.
Each line is just a string that gets split on "=" with the right hand side of that split being assigned as the value, and the left hand side being assigned as the key.
If you look at the source code for the run command:
https://github.com/docker/cli/blob/master/cli/command/container/run.go
you'll see that environment variables aren't set set through bash commands. It's just a series of string assignments.
This is pretty much always the case with env files.They're strings, and are set as such. The syntax you're trying to use only works on platforms that make an effort to run env files as a series of bash commands, but docker doesn't do that. This has nothing do with with VS code, it's just how env files ususally work.
One potential workaround would be to move this assignment from your env file to your Dockerfile or docker-compose. Those instructions are run as bash commands, so your variable call will work.
Dockerfile
ENV FIRST=ONE
ENV SECOND=${FIRST}
Here, inside your container echo ${SECOND} will print out ONE.
docker-compose
Docker compose environment variables work a bit differently. It doesn't set the variables in your compose file sequentially, so referencing a variable that you set in the same service definition doesn't work. However, If your variables are set in a .env file in the same directory as your compose file, then you can access those values by doing:
services:
myapp:
environment:
- VAR_IN_MY_CONTAINER=${VAR_ON_MY_HOST}
This behavior happens because compose considers any .env file in its directory to be part of the host environment.
Answered by Charles Desbiens on October 25, 2020
0 Asked on January 9, 2021 by dumi-padureanu
3 Asked on January 9, 2021 by lek
0 Asked on January 9, 2021 by henry-joseph
1 Asked on January 9, 2021 by marcio
2 Asked on January 9, 2021
1 Asked on January 9, 2021 by nolan-aguirre
0 Asked on January 9, 2021 by rhcp_lean
1 Asked on January 9, 2021 by user7041266
2 Asked on January 9, 2021 by c3nturi0n2013
1 Asked on January 9, 2021 by unknown
2 Asked on January 8, 2021 by eduardoreynoso
2 Asked on January 8, 2021 by farhad
1 Asked on January 8, 2021 by jonas-arcangel
4 Asked on January 8, 2021 by abraham-arreola
3 Asked on January 8, 2021
Get help from others!
Recent Questions
Recent Answers
© 2023 AnswerBun.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP