There are three ways to pass environment variables to docker
First way
Using -e flag like -e ENV_NAME='ENV_VALUE'
Example with one environment variable
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD='secret' -d mysql:tag
Example with two environment variables
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD='secret' -e MYSQL_DATABASE='mySchema' -d mysql:tag
Example with two environment variables and many options
docker run --name some-mysql -d -t -i -e MYSQL_ROOT_PASSWORD='secret' -e MYSQL_DATABASE='mySchema' mysql:tag
NOTE: You should pass image name mysql:tag after options like -e MYSQL_ROOT_PASSWORD='secret' -e MYSQL_DATABASE='mySchema'
Second way
Using .env file. basicly you will add environment variables to .env file then pass this name to docker run command like docker run --env-file ./.env
Example with one environment variable
Create .env file
MYSQL_ROOT_PASSWORD=secret
Then use it in docker command
docker run --name some-mysql --env-file ./.env -d mysql:tag
Example with two environment variables
Create .env file
MYSQL_ROOT_PASSWORD=secret
MYSQL_DATABASE=mySchema
Then use it in docker command
docker run --name some-mysql --env-file ./.env -d mysql:tag
Example with two environment variables and many options
Create .env file
MYSQL_ROOT_PASSWORD=secret
MYSQL_DATABASE=mySchema
Then use it in docker command
docker run --name some-mysql -d -t -i --env-file ./.env mysql:tag
NOTE: You shouldn't add single quote or double quote to the value
NOTE: You should pass image name mysql:tag after options like --env-file ./.env
Third way
Using linux environment variables so first we need to explain how to add linux environment variables. there are two type of it (local, global). for example -e ENV_NAME.
To add local environment variables just use $ export MY_NAME='ahmed'. then try to retrive it $ printenv MY_NAME the result will be ahmed.
NOTE: When you use $ export MY_NAME='ahmed' you can use MY_NAME in any command in current terminal. so if you try to use it in anther terminal it will not work.
To add environment variables to work in current command only just use $ MY_NAME='ahmed' my_command. for example $ MY_NAME='ahmed' printenv MY_NAME the result will be ahmed. so if you try to print MY_NAME again it will not work.
- Global (for all terminals)
 
To add environment variables to work in all terminals just open ~/.bashrc then add your environment variables like
MY_NAME='ahmed'
ENV_NAME='ENV_VALUE'
Then try to print it using printenv MY_NAME the result will be ahmed.
Let's follow the examples.
Example with one environment variable
export MYSQL_ROOT_PASSWORD='secret'
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD -d mysql:tag
Example with two environment variables
export MYSQL_ROOT_PASSWORD='secret'
export MYSQL_DATABASE='mySchema'
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD -e MYSQL_DATABASE -d mysql:tag
Example with two environment variables and many options
export MYSQL_ROOT_PASSWORD='secret'
export MYSQL_DATABASE='mySchema'
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD -e MYSQL_DATABASE -d -t -i mysql:tag
NOTE: You should pass image name mysql:tag after options like -e MYSQL_ROOT_PASSWORD -e MYSQL_DATABASE.
Demo
Dockerfile
FROM debian
ENTRYPOINT ["printenv", "ENV_NAME"]
Try to use it
$ docker build --tag demo .
$ ENV_NAME='Hello World' docker run -e ENV_NAME demo:latest
$ Hello World
$ docker run -e ENV_NAME='Hello World' demo:latest
$ Hello World