I’m having two problems using Dockerfile args. First problem is ARGs in Dockerfile are not getting overridden. Second problem is the service instance fails to start.
My Docker file has:
RUN echo $FOO > ./foo.txt
In the Build and deployment settings, I override Args and set with:
In the build logs, FOO is not overridden:
#13 [7/8] RUN echo banana > ./foo.txt
#13 DONE 0.1s
Additionally, the service will fail to start. The Runtime logs don’t say what is failing; it just fails.
If I remove the FOO override, then service instance will build and start just fine.
Can you describe how are you trying to set the
FOO value from your service configuration?
The way to go is to define an environment variable to override the
ARG variable value.
Adding the environment variable
FOO with the value
APPLE should work with the example you provided.
Alright, thanks! This field is used to provide the arguments to pass to the Docker command.
To override the
FOO ARG, setting up an environment variable with
FOO as the name and
APPLE as the value should work.
I’m not trying to pass FOO as a runtime env var.
I want to pass args to the Docker command, as if I typed:
docker build --build-arg FOO=apple -t my_image .
And in the Dockerfile:
RUN echo $FOO > ./foo.txt
I just tried again putting [“FOO=apple”] in the ARgs override, and runtime fails:
The env var will be provided at build time also.
We lack documentation on that but have an initiative to better cover this topic.
You can check out the following post, there is an example showcasing how to override
ARGs: Dockerfile Deployment on High-Performance MicroVMs is GA - Koyeb.
Regarding your current configuration:
- remove the args override
- add an env var
And everything should work as expected.
Ok, putting FOO in env var works!
So what is this Args field for?
And why does my service fail to start when I put something in there?
I’m sorry you had to struggle with this, we need to make the widget more obvious.
As @edouard explained, the environment variables are set both as runtime environment variables (
docker run -e ...) and as build arguments (
docker build --build-arg ...).
Regarding the other settings:
Command is a string, which corresponds to the first entry of a Dockerfile’s
Args is an array of strings containing the following entries of
So, for a Dockerfile with
CMD ["nginx", "-g", "daemon off;"], you would need to set
["-g", "daemon off;"].
Ok, thanks for the explanations.
Minimally, you should probably change “Args” to “Command Args”, so people don’t think it’s a substitute for --build-arg.
Also, failing the build when Args is non-empty, without any notification is kind of rough. Need better diagnostics when Command/Args are malformed.