Home > Mobile >  How to pass ALL environment variables to container with docker exec
How to pass ALL environment variables to container with docker exec

Time:10-29

It's possible to set one or more environment variables in the container while doing docker exec, for example:

docker exec -ti -e VAR=1 -e HOME container_name bash

But I would like to pass all the shell's environment variables without explicitly specifying them individually. Essentially the equivalent of sudo -E, although it's a different thing.

According to the documentation, there is no such option. But one hack would be something like:

env > env_vars && docker exec -ti --env-file ./env_vars container_name bash

Which works, but I'm looking for a simple one step solution that doesn't involve creating a temporary file. Perhaps a bash trick I don't know or haven't thought of yet. Thanks.

CodePudding user response:

With Bash it seems using process substitution work:

docker run --rm -ti --env-file <(env) alpine sh

Note, this creates a temporary fifo file behind the scenes anyway.

Note, this will not work properly with variables containing newlines, they are cutoff on newlines. You should do something along, I tried to make it short:

readarray -d '' -t args < <(env -0 | sed -z 's/^/--env\x00/')
docker run --rm -ti "${args[@]}" alpine sh
  • Related