Home > Back-end >  Docker inspect command not showing all the ENV vars
Docker inspect command not showing all the ENV vars

Time:04-03

I ran an Alpine Docker container using the following command:

docker run -itd --env "my_env_var=test" --name mycontainer alpine

Now when I run the env command from inside the Docker container to get all the Env vars, I get the following output:

[root@ip-172-31-46-169 ~]# docker exec -it mycontainer /bin/sh
HOSTNAME=9de9045b5264
SHLVL=1
HOME=/root
my_env_var=test
TERM=xterm
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/

So far, so good.

But when I try to get the Environment Variables using the docker inspect command, I see that too many ENV vars are missing (Only 2 of them are found):

[root@ip-172-31-46-169 ~]# docker inspect mycontainer
...
...
"Env": [
            "my_env_var=test",
            "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
        ],
...
...

Also, I used the docker exec command to print the ENV vars using the following command:

[root@ip-172-31-46-159 ~]# docker exec mycontainer /bin/sh -c env
HOSTNAME=9de9045b5264
SHLVL=1
HOME=/root
my_env_var=test
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/

This time, all the ENV vars were displayed except for the TERM=xterm.

I observed this behaviour with centos Docker images as well. Why is it so that all the ENV vars are not getting printed using docker inspect or docker exec?

CodePudding user response:

Why is it so that all the ENV vars are not getting printed using docker inspect or docker exec?

Because /bin/sh sets them.

CodePudding user response:

This happens because those environment variables are set by the binaries you are using to display them — here /bin/sh.

There are mechanisms in Linux distribution allowing you setting variables for an interactive shell, like /etc/profile to cite only one out of them.

A better command to run in order to have something closer to what your inspect command would give you would be:

docker exec mycontainer /usr/bin/env

Which gives

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=1fbc89f485c2
my_env_var=test
HOME=/root

For the different commands that are giving you the TERM variable, this is caused by the -t option of docker:

--tty, -t Allocate a pseudo-TTY

  • Related