2

I'm running my app on Azure App Services, so I don't have access to docker run command. Now, I want to pass some variables into ENTRYPOINT for which I'm trying to use ARGs during build time itself. Here is how it looks,

docker build -t $IMAGE_NAME --build-arg env=dev --build-arg amplify_key=xxxxxxxxxxxxxx . 

In my Dockerfile,

ARG env ARG amplify_key ENTRYPOINT ["/bin/bash", "-c", "init.sh $env $amplify_key"] 

But this doesn't seem to be working. Please let me know the issue.

1 Answer 1

2

$variable references can be either expanded in the Dockerfile or by the shell when a command gets run. Only some Dockerfile commands perform variable expansions; for RUN, CMD, and ENTRYPOINT, it is only done by a shell. When a shell does the expansion it's not aware of Docker-specific ARGs, only environment variables, so you need to copy the argument to an ENV. There's an example of this in the Dockerfile documentation.

ARG env ARG amplify_key ENV env=$env amplify_key=$amplify_key CMD init.sh $env $amplify_key 

Assuming init.sh is your own script, though, once you have those values in environment variables, you can just access them directly, without passing them through positional parameters.

#!/bin/sh echo "Running in $env environment" curl -H "Authorization: Bearer $amplify_key" ... 
ARG env ARG amplify_key ENV env=$env amplify_key=$amplify_key CMD ["init.sh"] 

This lets you do things like override the variable values at startup time more easily, and if you need to manually supply parameters to the command, the set of mandatory options is much smaller. If you're using the pattern of ENTRYPOINT doing some first-time setup and then running exec "$@" to run the CMD, this also works much better (ENTRYPOINT and sh -c have some tricky interactions).

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.