Environment variables
Using environment variables
There are several ways to use environment variables (env vars) in your apps.
- Hardcoded environment variables in your project compose file, using the
env
orargs
keywords.
More on environment variables and build arguments. - Passing external environment variables to a compose file, using the
${MY_ENV_VAR}
syntax in yourdocker-compose.yml
file. - Doing this manually or with a custom script by adding optional
.env
andentrypoint
files in the root of the project.
See this example on how to pass environment variables from a.env
file to a service in the compose file, which in turn injects them into the Docker container.
Environment variables in builds
You can create a .env
and/or entrypoint
file in the root of your project.
These files will be sourced by the Swarmlet deployer_agent
service before building and deploying an app.
Print out all the current environment variables used by deployer_agent
:
ENV=$(docker container exec $(docker ps --filter name=deployer_agent -q) /entrypoint printenv) && echo "${ENV%%BASH_FUNC*}"
Adding environment variables to your apps
Use Docker configs and secrets to store different types of environment variables in your swarm.
See the Swarmlet Secrets and configs documentation section.
Secrets and configs can be added to services by specifying them in - you guessed it - the project docker-compose.yml
file.
# On a swarm manager node
MY_CONF="ALTERNATIVE_HOSTNAME=SwarmletJohansson"
echo $MY_CONF | docker config create my-config -
./docker-compose.yml
version: "3.7"
services:
my-service:
image: alpine
command: sh -c 'echo "Contents of /my-config:"; cat /my-config'
### Or:
# command: sh -c 'set -o allexport; source /my-config; printenv'
configs:
- my-config
deploy:
mode: replicated
replicas: 1
configs:
my-config:
external: true
Deploy the stack, either create a local project and push (as described here), or copy-paste the above snippet to the server and run:
docker stack deploy --compose-file docker-compose.yml env-vars
docker service logs env-vars_my-service -f