Get Environment Variable from Docker Container

后端 未结 10 1969
花落未央
花落未央 2020-12-12 11:12

What\'s the simplest way to get an environment variable from a docker container that has not been declared in the Dockerfile?

For instance, an environment v

相关标签:
10条回答
  • 2020-12-12 11:53

    We can modify entrypoint of a non-running container with the docker run command.

    Example show PATH environment variable:

    1. using bash and echo: This answer claims that echo will not produce any output, which is incorrect.

      docker run --rm --entrypoint bash <container> -c 'echo "$PATH"'
      
    2. using printenv

      docker run --rm --entrypoint printenv <container> PATH
      
    0 讨论(0)
  • 2020-12-12 11:53

    One more since we are dealing with json

    docker inspect <NAME|ID> | jq '.[] | .Config.Env'
    

    Output sample

    [
      "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
      "NGINX_VERSION=1.19.4",
      "NJS_VERSION=0.4.4",
      "PKG_RELEASE=1~buster"
    ]
    
    0 讨论(0)
  • 2020-12-12 11:54

    You can use printenv VARIABLE instead of /bin/bash -c 'echo $VARIABLE. It's much simpler and it does not perform substitution:

    docker exec container printenv VARIABLE
    
    0 讨论(0)
  • 2020-12-12 11:58

    The downside of using docker exec is that it requires a running container, so docker inspect -f might be handy if you're unsure a container is running.

    Example #1. Output a list of space-separated environment variables in the specified container:

    docker inspect -f \
       '{{range $index, $value := .Config.Env}}{{$value}} {{end}}' container_name
    

    the output will look like this:

    ENV_VAR1=value1 ENV_VAR2=value2 ENV_VAR3=value3
    

    Example #2. Output each env var on new line and grep the needed items, for example, the mysql container's settings could be retrieved like this:

    docker inspect -f \
        '{{range $index, $value := .Config.Env}}{{println $value}}{{end}}' \
        container_name | grep MYSQL_
    

    will output:

    MYSQL_PASSWORD=secret
    MYSQL_ROOT_PASSWORD=supersecret
    MYSQL_USER=demo
    MYSQL_DATABASE=demodb
    MYSQL_MAJOR=5.5
    MYSQL_VERSION=5.5.52
    

    Example #3. Let's modify the example above to get a bash friendly output which can be directly used in your scripts:

    docker inspect -f \
       '{{range $index, $value := .Config.Env}}export {{$value}}{{println}}{{end}}' \
       container_name | grep MYSQL
    

    will output:

    export MYSQL_PASSWORD=secret
    export MYSQL_ROOT_PASSWORD=supersecret
    export MYSQL_USER=demo
    export MYSQL_DATABASE=demodb
    export MYSQL_MAJOR=5.5
    export MYSQL_VERSION=5.5.52
    

    If you want to dive deeper, then go to Go’s text/template package documentation with all the details of the format.

    0 讨论(0)
提交回复
热议问题