devcontainers / devcontainers/spec

Array format in `postCreateCommand` fails to find any dependencies

Open
#491 1 comment 0 reactions 0 assignees View on GitHub
Dominant language
No language data
Stars
5.7k
Forks
496
PR merge metrics
No merged PRs in 30d

Description

Hi,

I've a simple `.devcontainer.json` like which uses golang base image, install 3 different tools (kind, kubebuilder, and kubectl). I am using the array syntax in `postCreateCommand` to install the packages. Here's the file.

```json
{
"name": "Kubebuilder DevContainer",
"image": "golang:1.22-bullseye",
"features": {
"ghcr.io/devcontainers/features/docker-in-docker:2": {},
"ghcr.io/devcontainers/features/git:1": {}
},

// Required for running Kind inside DevContainer
"runArgs": ["--network=host"],

"customizations": {
"vscode": {
"settings": {
"terminal.integrated.shell.linux": "/bin/bash"
},
"extensions": [
"ms-kubernetes-tools.vscode-kubernetes-tools",
"ms-azuretools.vscode-docker"
]
}
},

"onCreateCommand": [
// Install Kind
"curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.24.0/kind-linux-amd64",
"chmod +x ./kind",
"mv ./kind /usr/local/bin/kind",

// Install kubebuilder
"KUBEBUILDER_LATEST=$(curl -s https://api.github.com/repos/kubernetes-sigs/kubebuilder/releases/latest | grep 'tag_name' | cut -d\\\" -f4)",
"curl -Lo kubebuilder.tar.gz https://dl.kubebuilder.io/kubebuilder/${KUBEBUILDER_LATEST}/kubebuilder_${KUBEBUILDER_LATEST}_linux_amd64.tar.gz",
"tar -zxvf kubebuilder.tar.gz -C /usr/local/",
"rm kubebuilder.tar.gz",
"ln -s /usr/local/kubebuilder/bin/kubebuilder /usr/local/bin/kubebuilder",

// Install kubectl
"KUBECTL_LATEST=$(curl -s https://dl.k8s.io/release/stable.txt)",
"curl -LO https://dl.k8s.io/release/${KUBECTL_LATEST}/bin/linux/amd64/kubectl",
"chmod +x ./kubectl",
"mv ./kubectl /usr/local/bin/kubectl",

// Verify installations
"kind version",
"kubebuilder version",
"docker --version",
"go version",
"kubectl version --client",
"apt-get clean"
]
}
```

However, the `postCreateCommand` fails to find the `curl` binary.

```
[408195 ms] onCreateCommand failed with exit code 126. Skipping any further user-provided commands.
Error: Command failed: curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.24.0/kind-linux-amd64 chmod +x ./kind mv ./kind /usr/local/bin/kind KUBEBUILDER_LATEST=$(curl -s https://api.github.com/repos/kubernetes-sigs/kubebuilder/releases/latest | grep 'tag_name' | cut -d\" -f4) curl -Lo kubebuilder.tar.gz https://dl.kubebuilder.io/kubebuilder/${KUBEBUILDER_LATEST}/kubebuilder_${KUBEBUILDER_LATEST}_linux_amd64.tar.gz tar -zxvf kubebuilder.tar.gz -C /usr/local/ rm kubebuilder.tar.gz ln -s /usr/local/kubebuilder/bin/kubebuilder /usr/local/bin/kubebuilder KUBECTL_LATEST=$(curl -s https://dl.k8s.io/release/stable.txt) curl -LO https://dl.k8s.io/release/${KUBECTL_LATEST}/bin/linux/amd64/kubectl chmod +x ./kubectl mv ./kubectl /usr/local/bin/kubectl kind version kubebuilder version docker --version go version kubectl version --client apt-get clean
at N7 (/home/linuxbrew/.linuxbrew/lib/node_modules/@devcontainers/cli/dist/spec-node/devContainersSpecCLI.js:235:130)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async Am (/home/linuxbrew/.linuxbrew/lib/node_modules/@devcontainers/cli/dist/spec-node/devContainersSpecCLI.js:227:4393)
at async Xw (/home/linuxbrew/.linuxbrew/lib/node_modules/@devcontainers/cli/dist/spec-node/devContainersSpecCLI.js:227:3738)
at async $w (/home/linuxbrew/.linuxbrew/lib/node_modules/@devcontainers/cli/dist/spec-node/devContainersSpecCLI.js:227:2745)
at async fa (/home/linuxbrew/.linuxbrew/lib/node_modules/@devcontainers/cli/dist/spec-node/devContainersSpecCLI.js:227:2386)
at async DtA (/home/linuxbrew/.linuxbrew/lib/node_modules/@devcontainers/cli/dist/spec-node/devContainersSpecCLI.js:465:1496)
at async NH (/home/linuxbrew/.linuxbrew/lib/node_modules/@devcontainers/cli/dist/spec-node/devContainersSpecCLI.js:465:964)
at async KtA (/home/linuxbrew/.linuxbrew/lib/node_modules/@devcontainers/cli/dist/spec-node/devContainersSpecCLI.js:482:3771)
at async eB (/home/linuxbrew/.linuxbrew/lib/node_modules/@devcontainers/cli/dist/spec-node/devContainersSpecCLI.js:482:4886)
{"outcome":"error","message":"Command failed: curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.24.0/kind-linux-amd64 chmod +x ./kind mv ./kind /usr/local/bin/kind KUBEBUILDER_LATEST=$(curl -s https://api.github.com/repos/kubernetes-sigs/kubebuilder/releases/latest | grep 'tag_name' | cut -d\\\" -f4) curl -Lo kubebuilder.tar.gz https://dl.kubebuilder.io/kubebuilder/${KUBEBUILDER_LATEST}/kubebuilder_${KUBEBUILDER_LATEST}_linux_amd64.tar.gz tar -zxvf kubebuilder.tar.gz -C /usr/local/ rm kubebuilder.tar.gz ln -s /usr/local/kubebuilder/bin/kubebuilder /usr/local/bin/kubebuilder KUBECTL_LATEST=$(curl -s https://dl.k8s.io/release/stable.txt) curl -LO https://dl.k8s.io/release/${KUBECTL_LATEST}/bin/linux/amd64/kubectl chmod +x ./kubectl mv ./kubectl /usr/local/bin/kubectl kind version kubebuilder version docker --version go version kubectl version --client apt-get clean","description":"The onCreateCommand in the devcontainer.json failed.","containerId":"cef2971520f45f99fc5313bbb8c9b42ad8083b6c5e79d14624091bae9d6c2bcb"}

```

If I run the same steps inside the devcontainer or pass a shell script, it works just fine. **I've gone through the documentation that array syntax doesn't pass the commands to shell, whereas the string format does**.

My question is how can I use the array syntax to execute multi line script?

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.