vscode-remote-release
vscode-remote-release copied to clipboard
Using dockerComposeFile via podman-compose, resolves Dockerfile in wrong directory (ENOENT on Dockerfile)
- VSCode Version: 1.70.0 (flatpak)
- Local OS Version: SteamOS (Arch linux)
- Remote OS Version: N/A
- Remote Extension/Connection Type: N/A
- Logs:
[2022-08-15T13:58:23.111Z] Remote-Containers 0.245.0 in VS Code 1.70.0 (da76f93349a72022ca4670c1b84860304616aaa2).
[2022-08-15T13:58:23.111Z] Start: Resolving Remote
[2022-08-15T13:58:23.159Z] Setting up container for folder or workspace: /home/deck/test/node-pg
[2022-08-15T13:58:23.164Z] Start: Check Docker is running
[2022-08-15T13:58:23.165Z] Start: Run: /home/deck/flatpak/docker version --format {{.Server.APIVersion}}
[2022-08-15T13:58:23.383Z] Stop (218 ms): Run: /home/deck/flatpak/docker version --format {{.Server.APIVersion}}
[2022-08-15T13:58:23.385Z] Server API version: 3.4.4
[2022-08-15T13:58:23.385Z] Stop (221 ms): Check Docker is running
[2022-08-15T13:58:23.388Z] Start: Run: /home/deck/flatpak/docker volume ls -q
[2022-08-15T13:58:23.589Z] Stop (201 ms): Run: /home/deck/flatpak/docker volume ls -q
[2022-08-15T13:58:23.607Z] Start: Run: /home/deck/flatpak/docker ps -q -a --filter label=vsch.local.folder=/home/deck/test/node-pg --filter label=vsch.quality=stable
[2022-08-15T13:58:23.799Z] Stop (192 ms): Run: /home/deck/flatpak/docker ps -q -a --filter label=vsch.local.folder=/home/deck/test/node-pg --filter label=vsch.quality=stable
[2022-08-15T13:58:23.800Z] Start: Run: /home/deck/flatpak/docker ps -q -a --filter label=devcontainer.local_folder=/home/deck/test/node-pg
[2022-08-15T13:58:23.989Z] Stop (189 ms): Run: /home/deck/flatpak/docker ps -q -a --filter label=devcontainer.local_folder=/home/deck/test/node-pg
[2022-08-15T13:58:23.992Z] Start: Run: /app/extra/vscode/code /home/deck/.var/app/com.visualstudio.code/data/vscode/extensions/ms-vscode-remote.remote-containers-0.245.0/dist/spec-node/devContainersSpecCLI.js up --user-data-folder /home/deck/.var/app/com.visualstudio.code/config/Code/User/globalStorage/ms-vscode-remote.remote-containers/data --docker-path /home/deck/flatpak/docker --docker-compose-path /home/deck/flatpak/docker-compose --workspace-folder /home/deck/test/node-pg --workspace-mount-consistency cached --id-label devcontainer.local_folder=/home/deck/test/node-pg --log-level debug --log-format json --config /home/deck/test/node-pg/.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 true
[2022-08-15T13:58:24.260Z] remote-containers 0.245.0.
[2022-08-15T13:58:24.260Z] Start: Run: /home/deck/flatpak/docker buildx version
[2022-08-15T13:58:24.343Z] Stop (83 ms): Run: /home/deck/flatpak/docker buildx version
[2022-08-15T13:58:24.343Z] Start: Resolving Remote
[2022-08-15T13:58:24.348Z] Start: Run: /home/deck/flatpak/docker-compose version --short
[2022-08-15T13:58:24.588Z] Stop (240 ms): Run: /home/deck/flatpak/docker-compose version --short
[2022-08-15T13:58:24.590Z] Start: Run: /home/deck/flatpak/docker ps -q -a --filter label=com.docker.compose.project=nodepgdevcontainer --filter label=com.docker.compose.service=app
[2022-08-15T13:58:24.774Z] Stop (184 ms): Run: /home/deck/flatpak/docker ps -q -a --filter label=com.docker.compose.project=nodepgdevcontainer --filter label=com.docker.compose.service=app
[2022-08-15T13:58:24.776Z] Start: Run: /home/deck/flatpak/docker-compose -f /home/deck/test/node-pg/.devcontainer/docker-compose.yml config
[2022-08-15T13:58:25.019Z] Stop (243 ms): Run: /home/deck/flatpak/docker-compose -f /home/deck/test/node-pg/.devcontainer/docker-compose.yml config
[2022-08-15T13:58:25.019Z] services:
app:
build:
args:
VARIANT: '18'
context: .
dockerfile: Dockerfile
command: sleep infinity
network_mode: service:db
volumes:
- ..:/workspace:cached
db:
environment:
POSTGRES_DB: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_USER: postgres
image: postgres:latest
restart: unless-stopped
volumes:
- postgres-data:/var/lib/postgresql/data
version: '3.8'
volumes:
postgres-data: null
[2022-08-15T13:58:25.025Z] Start: Run: /home/deck/flatpak/docker -v
[2022-08-15T13:58:25.187Z] Stop (162 ms): Run: /home/deck/flatpak/docker -v
[2022-08-15T13:58:25.188Z] Start: Run: /home/deck/flatpak/docker events --format json --filter event=start
[2022-08-15T13:58:25.194Z] PersistedPath=/home/deck/.var/app/com.visualstudio.code/config/Code/User/globalStorage/ms-vscode-remote.remote-containers/data, ContainerHasLabels=false
[2022-08-15T13:58:25.195Z] Start: Run: /home/deck/flatpak/docker-compose -f /home/deck/test/node-pg/.devcontainer/docker-compose.yml config
[2022-08-15T13:58:25.421Z] Stop (226 ms): Run: /home/deck/flatpak/docker-compose -f /home/deck/test/node-pg/.devcontainer/docker-compose.yml config
[2022-08-15T13:58:25.421Z] services:
app:
build:
args:
VARIANT: '18'
context: .
dockerfile: Dockerfile
command: sleep infinity
network_mode: service:db
volumes:
- ..:/workspace:cached
db:
environment:
POSTGRES_DB: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_USER: postgres
image: postgres:latest
restart: unless-stopped
volumes:
- postgres-data:/var/lib/postgresql/data
version: '3.8'
volumes:
postgres-data: null
[2022-08-15T13:58:25.424Z] Error: ENOENT: no such file or directory, open '/home/deck/.var/app/com.visualstudio.code/data/vscode/extensions/ms-vscode-remote.remote-containers-0.245.0/Dockerfile'
[2022-08-15T13:58:25.432Z] Stop (1440 ms): Run: /app/extra/vscode/code /home/deck/.var/app/com.visualstudio.code/data/vscode/extensions/ms-vscode-remote.remote-containers-0.245.0/dist/spec-node/devContainersSpecCLI.js up --user-data-folder /home/deck/.var/app/com.visualstudio.code/config/Code/User/globalStorage/ms-vscode-remote.remote-containers/data --docker-path /home/deck/flatpak/docker --docker-compose-path /home/deck/flatpak/docker-compose --workspace-folder /home/deck/test/node-pg --workspace-mount-consistency cached --id-label devcontainer.local_folder=/home/deck/test/node-pg --log-level debug --log-format json --config /home/deck/test/node-pg/.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 true
[2022-08-15T13:58:25.433Z] Exit code 1
[2022-08-15T13:58:25.442Z] Command failed: /app/extra/vscode/code /home/deck/.var/app/com.visualstudio.code/data/vscode/extensions/ms-vscode-remote.remote-containers-0.245.0/dist/spec-node/devContainersSpecCLI.js up --user-data-folder /home/deck/.var/app/com.visualstudio.code/config/Code/User/globalStorage/ms-vscode-remote.remote-containers/data --docker-path /home/deck/flatpak/docker --docker-compose-path /home/deck/flatpak/docker-compose --workspace-folder /home/deck/test/node-pg --workspace-mount-consistency cached --id-label devcontainer.local_folder=/home/deck/test/node-pg --log-level debug --log-format json --config /home/deck/test/node-pg/.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 true
[2022-08-15T13:58:25.442Z] Exit code 1
Steps to Reproduce:
- install vscode flatpak
- install remote-containers extension
- install podman@latest and podman-compose@devel, provide shims to invoke from within flatpak
- create a new devcontainer config via the default "node.js + postgres" wizard
- update config to work around podman compatibility issues (below)
- try to open the container & see the above logs
Alternatively (sorry, only useful on a steam deck):
- install https://github.com/hunterloftis/dotfiles on a steam deck
- open ~/test/node-pg in a devcontainer
- see the above failure
"remoteUser": "node",
// https://blog.lifeishao.com/2021/12/30/replacing-docker-with-podman-for-your-vscode-devcontainers/
"runArgs": [
"--userns=keep-id"
],
"containerUser": "node" // the value needs to match the value of "remoteUser"
I believe this may be the same problem I was having: https://github.com/microsoft/vscode-remote-release/issues/6815#issuecomment-1152949930
On that issue, it was fixed for Docker, but it was not fixed for Podman.
Can you try downgrading to "Remote - Containers" v0.234.0? - I believe this is last version that worked before Podman compose files started being called relative to the remote-containers
podman-compose config
does not resolve the context to an absolute path. We need to handle that here: https://github.com/devcontainers/cli/blob/6278ab6033ddd056d5ab9923b1b9970575433d51/src/spec-node/dockerCompose.ts#L158
Since OP didn't confirm, I will. The issue is still happening in v0.266.1 and yes, rolling back to v0.234.0 seems to resolve it. I'll watch this issue for updates.
Can confirm this happens with both the current release (v0.275.1) and pre-release (v0.278.0) versions, downgrading to v0.234.0 at least gets the build going unlike with the more recent versions.
Still an issue on v0.288.1, based on the error message, seems like the current working directory just needs to be set to the .devcontainer path, or an unqualified Dockerfile needs to have the expanded path prepended before calling out?
still an issue on v0.302.0 (pre-release)
Can this please be fixed? This holds me up from using podman-compose. Thanks.
I ran into this issue under Fedora 39 using podman. Here is a workaround using a wrapper script for podman-compose
:
#!/bin/sh
set -e
# Workaround https://github.com/microsoft/vscode-remote-release/issues/7071
# "Using dockerComposeFile via podman-compose, resolves Dockerfile in wrong directory (ENOENT on Dockerfile)"
# Save this script to somewhere like /usr/local/bin/podman-compose-vscode-workaround
# then in vscode settings, set "dev.containers.dockerComposePath" = "podman-compose-vscode-workaround"
# instead of "podman-compose".
#
# Using information from the parent process, set a VSCODE_WORKSPACE_FOLDER
# environment variable that can be optionally used in docker-compose.yaml
# to set an absolute path for the context:
#
# version: '3'
# services:
# myapp:
# build:
# context: ${VSCODE_WORKSPACE_FOLDER:-..}
# dockerfile: .devcontainer/Dockerfile
VSCODE_WORKSPACE_FOLDER="$(grep -aoP "\x00--workspace-folder\x00\K[^\x00]+" /proc/$PPID/cmdline || true)"
export VSCODE_WORKSPACE_FOLDER
exec podman-compose $@