vscode-remote-release icon indicating copy to clipboard operation
vscode-remote-release copied to clipboard

Dev container configuration in user storage that builds from docker file does not use local folder path

Open misimpso opened this issue 1 year ago • 1 comments

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:

  1. Create .devcontainer/devcontainer.json file at the top of vscode workspace, with a locally referenced Dockerfile outside of the .devcontainer folder.
  2. Follow the steps here to "Copy configuration to user data folder"
  3. Go back to workspace in vscode > "Open a Remote Window" > "Reopen in container".
  4. 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 referenced Dockerfile.

Ticket copied from : https://github.com/devcontainers/cli/issues/748

misimpso avatar Feb 09 '24 23:02 misimpso

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"
	}

chrmarti avatar Feb 15 '24 11:02 chrmarti

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.'",
}

misimpso avatar Feb 20 '24 19:02 misimpso