vscode-remote-release
vscode-remote-release copied to clipboard
Dev container configuration in user storage that builds from docker file does not use local folder path
I'm using the new user storage for devcontainer.json
files mentioned in the v1.86 release of vscode.
My devcontainer.json
configuration file builds from a Dockerfile in my code base, however when I try to spin up the Remote Container, the runtime tries to locate the Dockerfile in my user storage folder for the Remote Containers plugin, and not the one in my codebase.
It looks like the devcontainer.local_folder
variable is correctly set to the top of my code base, however this variable is not used when referencing the dockerfile.
Here is an example of my .devcontainer/devcontainer.json
:
{
"name": "Dockerfile",
"build": {
"context": "..",
"dockerfile": "docker/dev.Dockerfile",
},
"initializeCommand": "echo 'The devcontainer has been created.'",
}
The example in the release does not show it working with a dockerfile build context. I would like to not commit my dockerfile to my codebase, however I need to reference an external dockerfile for my use case. Is this intentional behavior for this user devcontainer feature?
-
VSCode Version: 1.86.0
-
Local OS Version: Darwin arm64 22.6.0 (Ventura 13.6.3)
-
Remote Extension/Connection Type: Containers
-
Logs:
[2024-02-08T23:35:53.183Z] Start: Run: /bin/sh -c echo 'The devcontainer has been created.'
[2024-02-08T23:35:53.203Z] The devcontainer has been created.
[2024-02-08T23:35:53.203Z] Stop (20 ms): Run: /bin/sh -c echo 'The devcontainer has been created.'
[2024-02-08T23:35:53.203Z]
[2024-02-08T23:35:53.203Z] Start: Run: docker ps -q -a --filter label=devcontainer.local_folder=/Users/misimpso/app --filter label=devcontainer.config_file=/Users/misimpso/Library/Application Support/Code/User/globalStorage/ms-vscode-remote.remote-containers/configs/app/.devcontainer/devcontainer.json
[2024-02-08T23:35:53.261Z] Stop (58 ms): Run: docker ps -q -a --filter label=devcontainer.local_folder=/Users/misimpso/app --filter label=devcontainer.config_file=/Users/misimpso/Library/Application Support/Code/User/globalStorage/ms-vscode-remote.remote-containers/configs/app/.devcontainer/devcontainer.json
[2024-02-08T23:35:53.262Z] Error: ENOENT: no such file or directory, open '/Users/misimpso/Library/Application Support/Code/User/globalStorage/ms-vscode-remote.remote-containers/configs/app/.devcontainer/docker/dev.Dockerfile'
[2024-02-08T23:35:53.265Z] Stop (913 ms): Run: /Applications/Visual Studio Code.app/Contents/Frameworks/Code Helper (Plugin).app/Contents/MacOS/Code Helper (Plugin) /Users/misimpso/.vscode/extensions/ms-vscode-remote.remote-containers-0.338.1/dist/spec-node/devContainersSpecCLI.js up --user-data-folder /Users/misimpso/Library/Application Support/Code/User/globalStorage/ms-vscode-remote.remote-containers/data --container-session-data-folder /tmp/devcontainers-f11da69a-47f1-4d8b-b779-41c8d31c16201707435351230 --workspace-folder /Users/misimpso/app --workspace-mount-consistency cached --id-label devcontainer.local_folder=/Users/misimpso/app --id-label devcontainer.config_file=/Users/misimpso/Library/Application Support/Code/User/globalStorage/ms-vscode-remote.remote-containers/configs/app/.devcontainer/devcontainer.json --log-level debug --log-format json --config /Users/misimpso/Library/Application Support/Code/User/globalStorage/ms-vscode-remote.remote-containers/configs/app/.devcontainer/devcontainer.json --default-user-env-probe loginInteractiveShell --mount type=volume,source=vscode,target=/vscode,external=true --skip-post-create --update-remote-user-uid-default on --mount-workspace-git-root
[2024-02-08T23:35:53.265Z] Exit code 1
[2024-02-08T23:35:53.266Z] Command failed: /Applications/Visual Studio Code.app/Contents/Frameworks/Code Helper (Plugin).app/Contents/MacOS/Code Helper (Plugin) /Users/misimpso/.vscode/extensions/ms-vscode-remote.remote-containers-0.338.1/dist/spec-node/devContainersSpecCLI.js up --user-data-folder /Users/misimpso/Library/Application Support/Code/User/globalStorage/ms-vscode-remote.remote-containers/data --container-session-data-folder /tmp/devcontainers-f11da69a-47f1-4d8b-b779-41c8d31c16201707435351230 --workspace-folder /Users/misimpso/app --workspace-mount-consistency cached --id-label devcontainer.local_folder=/Users/misimpso/app --id-label devcontainer.config_file=/Users/misimpso/Library/Application Support/Code/User/globalStorage/ms-vscode-remote.remote-containers/configs/app/.devcontainer/devcontainer.json --log-level debug --log-format json --config /Users/misimpso/Library/Application Support/Code/User/globalStorage/ms-vscode-remote.remote-containers/configs/app/.devcontainer/devcontainer.json --default-user-env-probe loginInteractiveShell --mount type=volume,source=vscode,target=/vscode,external=true --skip-post-create --update-remote-user-uid-default on --mount-workspace-git-root
[2024-02-08T23:35:53.266Z] Exit code 1
Steps to Reproduce:
- Create
.devcontainer/devcontainer.json
file at the top of vscode workspace, with a locally referencedDockerfile
outside of the.devcontainer
folder. - Follow the steps here to "Copy configuration to user data folder"
- Go back to workspace in vscode > "Open a Remote Window" > "Reopen in container".
- The Remote container should start to spin up and the
devcontainer.json
should be referenced from my vscode global storage, but it should fail when it tries to locate the referencedDockerfile
.
Ticket copied from : https://github.com/devcontainers/cli/issues/748
The paths are relative to the devcontainer.json's folder, this is intentional. You can use `` to refer to the workspace folder:
"build": {
"context": "${localWorkspaceFolder}",
"dockerfile": "${localWorkspaceFolder}/.devcontainer/docker/dev.Dockerfile"
}
Referencing ${localWorkspaceFolder}
worked for me.
My devcontainer.json
looks like:
{
"name": "Dockerfile",
"build": {
"context": "${localWorkspaceFolder}",
"dockerfile": "${localWorkspaceFolder}/docker/dev.Dockerfile",
},
"initializeCommand": "echo 'The devcontainer has been created.'",
}