devcontainer
devcontainer copied to clipboard
Issue with hyphens in build args used in FROM
Hi thanks for a great tool.
I'm taking the Dockerfile and devcontainer.json from here.
The ARG for setting the ${VARIANT} contains a dash which seems to create a problem with the passing of command-line args in this script.
Here is the error I get:
docker: invalid reference format: repository name must be lowercase.
See 'docker run --help'.
and the debug output is:
Using workspace -v
[DEBUG] CONFIG_DIR: ./.devcontainer
[DEBUG] CONFIG_FILE: devcontainer.json
[DEBUG] CONFIG:
{
"name": "Node.js",
"build": {
"dockerfile": "Dockerfile",
"args": { "VARIANT": "16-bullseye" }
},
"customizations": {
"vscode": {
"extensions": [
"dbaeumer.vscode-eslint"
]
}
},
"remoteUser": "node"
}
[DEBUG] DOCKER_FILE: /home/amo_chumber/scratch/devcontainer-test/.devcontainer/Dockerfile
[DEBUG] REMOTE_USER: node
[DEBUG] ARGS: --build-arg VARIANT="16-bullseye"
[DEBUG] SHELL: null
[DEBUG] PORTS:
[DEBUG] ENVS:
[DEBUG] WORK_DIR: /workspace
[DEBUG] MOUNT: --mount type=bind,source=-v,target=/workspace
Building and starting container
invalid reference format
[DEBUG] DOCKER_IMAGE_HASH: Sending build context to Docker daemon 4.096kB
Step 1/2 : ARG VARIANT=16-bullseye
Step 2/2 : FROM mcr.microsoft.com/vscode/devcontainers/javascript-node:${VARIANT}
docker: invalid reference format: repository name must be lowercase.
See 'docker run --help'.
I suspect this is a bash-ism with some quoting...
yeah definitely a bash-ism:
amo_chumber@cloudshell:~/scratch/devcontainer-test$ docker build -f .devcontainer/$(cat .devcontainer/devcontainer.json | grep -v // | jq -r '.build.dockerfile') $(cat .devcontainer/devcontainer.json | grep -v // | jq -r '.build.args | to_entries? | map("--build-arg \(.key)=\"\(.value)\"")? | join(" ")') .
Sending build context to Docker daemon 4.608kB
Step 1/2 : ARG VARIANT=16-bullseye
Step 2/2 : FROM mcr.microsoft.com/vscode/devcontainers/javascript-node:${VARIANT}
invalid reference format
vs
amo_chumber@cloudshell:~/scratch/devcontainer-test$ docker build -f .devcontainer/Dockerfile --build-arg VARIANT="16-bullseye" .
Sending build context to Docker daemon 4.608kB
Step 1/2 : ARG VARIANT=16-bullseye
Step 2/2 : FROM mcr.microsoft.com/vscode/devcontainers/javascript-node:${VARIANT}
---> f9bdb7d738da
Successfully built f9bdb7d738da
So changing line 57 to:
ARGS=$(echo $CONFIG | jq -r '.build.args | to_entries? | map("--build-arg \(.key)=\(.value)")? | join(" ")')
seems to resolve this but I'm not sure of the wider implications of removing the \" from around \(.value)...
Changing line 57 didn't fix it for me. I had to manually go in and change it so that it wasn't using an argument. That does seem to be the issue though. Good job!