skip to Main Content

I want to pass environment variables in my docker run command and access them in my entrypoint shell script.

This is my super simple Dockerfile for test purposes:

FROM ubuntu:20.04

WORKDIR /

ADD entrypoint.sh .

RUN chmod 755 entrypoint.sh

ENTRYPOINT [ "/entrypoint.sh" ]

And this is the entrypoint.sh:

#!/bin/sh

printf "env var TEST = ${TEST} "

I just build the Dockerfile like this: docker build -t test:1.0 .

And then run it like this: docker run -i test:1.0 -e TEST='Hello world'

Unfortunately the output is not containing the env var.

2

Answers


  1. Something like this will work:

    entrypoint.sh

    #!/bin/sh
    echo $MYVAR
    

    Dockerfile

    FROM alpine:3.15.4
    WORKDIR /home/app
    COPY ./entrypoint.sh .
    ENV MYVAR=""
    ENTRYPOINT ["/bin/sh", "/home/app/entrypoint.sh"]
    

    And then you can build & run the container while setting the environment variable with:

    $ docker build -t test . && docker run -e MYVAR="hello world" test
    
    Login or Signup to reply.
  2. For the record: Predefining the variables is not the solution.

    The order of the args is important, like David Maze said.

    # incorrect
    docker run -i test:1.0 -e TEST='Hello world'
    
    # correct
    docker run -i -e TEST='Hello world' test:1.0 
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search