Issue Report: WSL2 Development Container Fails with Docker Socket Mount Error

Issue Report: WSL2 Development Container Fails with Docker Socket Mount Error

Issue Description

When attempting to open a folder in a container using VS Code’s Remote-Containers extension on Windows with WSL2, container creation consistently fails with the following error:

Error response from daemon: can't access specified distro mount service: stat /run/guest-services/distro-services/docker-desktop.sock: no such file or directory

Environment

  • OS: Windows with WSL2
  • Docker Desktop: Latest version with WSL2 backend
  • VS Code: Latest version
  • Extension: Remote-Containers (v0.401.0)
  • Docker socket location (found via find / -name docker.sock 2>/dev/null):
    /tmp/docker-desktop-root/mnt/host/wsl/docker-desktop-bind-mounts/Ubuntu/docker.sock

Reproduction Steps

  1. Create a Docker project with docker-compose.yml and .devcontainer/devcontainer.json
  2. Attempt to open the folder in container using VS Code’s “Remote-Containers: Open Folder in Container” command
  3. Container build succeeds, but container creation fails with the socket error

Configuration Files

docker-compose.yml

services:
  mcpdev:
    build:
      context: .
      dockerfile: Dockerfile
    volumes:
      - ../:/workspace:cached
      - /var/run/docker.sock:/var/run/docker.sock
    working_dir: /workspace
    entrypoint: ["tail", "-f", "/dev/null"]
    ports:
      - "5678:5678"
      - "23001-23030:23001-23030"
    extra_hosts:
      - "host.docker.internal:host-gateway"
    tty: true
    environment:
      TZ: Asia/Shanghai
      LANG: zh_CN.UTF-8

.devcontainer/devcontainer.json

{
  "name": "MCP Dev Container",
  "dockerComposeFile": "../docker-compose.yml",
  "service": "mcpdev",
  "workspaceFolder": "/workspace",
  "remoteUser": "root",
  "overrideCommand": false,
  "customizations": {
    "vscode": {
      "settings": {
        "remote.containers.enableWSLg": false,
        "remote.containers.mountWslDistro": false
      },
      "extensions": [
        "ms-python.python",
        "ms-python.vscode-pylance",
        "ms-toolsai.jupyter",
        "ms-azuretools.vscode-docker"
      ]
    }
  }
}

Troubleshooting Attempted

  1. Verified Docker daemon is running with ps aux | grep dockerd
  2. Located the actual Docker socket at /tmp/docker-desktop-root/mnt/host/wsl/docker-desktop-bind-mounts/Ubuntu/docker.sock
  3. Tried different Docker socket mount paths in docker-compose.yml:
    • Standard path: /var/run/docker.sock:/var/run/docker.sock
    • Actual path: /tmp/docker-desktop-root/mnt/host/wsl/docker-desktop-bind-mounts/Ubuntu/docker.sock:/var/run/docker.sock
  4. Disabled WSLg integration in devcontainer.json with "remote.containers.enableWSLg": false
  5. Disabled WSL distro mounting with "remote.containers.mountWslDistro": false
  6. Created symbolic link from actual socket location to standard location
  7. Simplified configuration to minimal settings
  8. Tried different container commands (tail -f /dev/null, sleep infinity)

Error Details

The error occurs during the docker compose up -d command that VS Code runs. Looking at the logs, VS Code is still trying to mount:

\\wsl.localhost\docker-desktop\mnt\host\wslg\runtime-dir\wayland-0:/tmp/vscode-wayland-469dafb0-2957-4338-85e8-3491c7bae47e.sock

More log

 => [mcpdev] exporting to image                                            0.0s
 => => exporting layers                                                    0.0s
 => => preparing layers for inline cache                                   0.0s
 => => writing image sha256:794a7433acba6dc9ccd16079e97bb7c557d92ab80d1ba  0.0s
 => => naming to docker.io/library/docker-mcpdev                           0.0s
 => [mcpdev] resolving provenance for metadata file                        0.0s
[+] Building 1/1
 ✔ mcpdev  Built                                                           0.0s
[2025-04-05T17:21:57.281Z] Stop (667 ms): Run: docker compose --project-name docker -f d:\projects\AI\MCP-Server-Unified-Deployment\docker\docker-compose.yml -f C:\Users\bu\AppData\Roaming\Code\User\globalStorage\ms-vscode-remote.remote-containers\data\docker-compose\docker-compose.devcontainer.build-1743873716614.yml build
[2025-04-05T17:21:57.287Z] Start: Run: docker inspect --type image docker-mcpdev
[2025-04-05T17:21:57.373Z] Stop (86 ms): Run: docker inspect --type image docker-mcpdev
[2025-04-05T17:21:57.373Z] Docker Compose override file for creating container:
services:
  'mcpdev':
    entrypoint: ["/bin/sh", "-c", "echo Container started\n
trap \"exit 0\" 15\n
\n
exec \"$$@\"\n
while sleep 1 & wait $$!; do :; done", "-"]
    labels:
      - 'devcontainer.local_folder=d:\projects\AI\MCP-Server-Unified-Deployment\docker'
      - 'devcontainer.config_file=d:\projects\AI\MCP-Server-Unified-Deployment\docker\.devcontainer\devcontainer.json'
    volumes:
      - vscode:/vscode
      - \\wsl.localhost\docker-desktop\mnt\host\wslg\runtime-dir\wayland-0:/tmp/vscode-wayland-e33353af-2e8e-40b6-8a80-34ea2d195b92.sock
volumes:
  
  vscode:
    external: true
[2025-04-05T17:21:57.373Z] Writing docker-compose.devcontainer.containerFeatures-1743873717373-0fe44850-87cb-4ffc-b34d-9e770993d93c.yml to C:\Users\bu\AppData\Roaming\Code\User\globalStorage\ms-vscode-remote.remote-containers\data\docker-compose
[2025-04-05T17:21:57.374Z] Start: Run: docker compose --project-name docker -f d:\projects\AI\MCP-Server-Unified-Deployment\docker\docker-compose.yml -f C:\Users\bu\AppData\Roaming\Code\User\globalStorage\ms-vscode-remote.remote-containers\data\docker-compose\docker-compose.devcontainer.build-1743873716614.yml -f C:\Users\bu\AppData\Roaming\Code\User\globalStorage\ms-vscode-remote.remote-containers\data\docker-compose\docker-compose.devcontainer.containerFeatures-1743873717373-0fe44850-87cb-4ffc-b34d-9e770993d93c.yml up -d
[2025-04-05T17:21:57.494Z] 
[2025-04-05T17:21:57.590Z] 
[+] Running 0/1
 - Container docker-mcpdev-1  Creating                                     0.0s
[2025-04-05T17:21:57.621Z] Error response from daemon: can't access specified distro mount service: stat /r
un/guest-services/distro-services/docker-desktop.sock: no such file or directory
[2025-04-05T17:21:57.683Z] Stop (309 ms): Run: docker compose --project-name docker -f d:\projects\AI\MCP-Server-Unified-Deployment\docker\docker-compose.yml -f C:\Users\bu\AppData\Roaming\Code\User\globalStorage\ms-vscode-remote.remote-containers\data\docker-compose\docker-compose.devcontainer.build-1743873716614.yml -f C:\Users\bu\AppData\Roaming\Code\User\globalStorage\ms-vscode-remote.remote-containers\data\docker-compose\docker-compose.devcontainer.containerFeatures-1743873717373-0fe44850-87cb-4ffc-b34d-9e770993d93c.yml up -d
[2025-04-05T17:21:57.685Z] Error: Command failed: docker compose --project-name docker -f d:\projects\AI\MCP-Server-Unified-Deployment\docker\docker-compose.yml -f C:\Users\bu\AppData\Roaming\Code\User\globalStorage\ms-vscode-remote.remote-containers\data\docker-compose\docker-compose.devcontainer.build-1743873716614.yml -f C:\Users\bu\AppData\Roaming\Code\User\globalStorage\ms-vscode-remote.remote-containers\data\docker-compose\docker-compose.devcontainer.containerFeatures-1743873717373-0fe44850-87cb-4ffc-b34d-9e770993d93c.yml up -d
[2025-04-05T17:21:57.685Z]     at ftA (C:\Users\bu\.vscode\extensions\ms-vscode-remote.remote-containers-0.401.0\dist\spec-node\devContainersSpecCLI.js:433:3355)
[2025-04-05T17:21:57.685Z]     at async htA (C:\Users\bu\.vscode\extensions\ms-vscode-remote.remote-containers-0.401.0\dist\spec-node\devContainersSpecCLI.js:413:3496)
[2025-04-05T17:21:57.685Z]     at async TtA (C:\Users\bu\.vscode\extensions\ms-vscode-remote.remote-containers-0.401.0\dist\spec-node\devContainersSpecCLI.js:485:4021)
[2025-04-05T17:21:57.685Z]     at async iB (C:\Users\bu\.vscode\extensions\ms-vscode-remote.remote-containers-0.401.0\dist\spec-node\devContainersSpecCLI.js:485:4963)
[2025-04-05T17:21:57.685Z]     at async wrA (C:\Users\bu\.vscode\extensions\ms-vscode-remote.remote-containers-0.401.0\dist\spec-node\devContainersSpecCLI.js:666:203)
[2025-04-05T17:21:57.685Z]     at async DrA (C:\Users\bu\.vscode\extensions\ms-vscode-remote.remote-containers-0.401.0\dist\spec-node\devContainersSpecCLI.js:665:14830)
[2025-04-05T17:21:57.685Z]     at async C:\Users\bu\.vscode\extensions\ms-vscode-remote.remote-containers-0.401.0\dist\spec-node\devContainersSpecCLI.js:485:1190
[2025-04-05T17:21:57.694Z] Stop (2153 ms): Run: C:\Users\bu\AppData\Local\Programs\Microsoft VS Code\Code.exe C:\Users\bu\.vscode\extensions\ms-vscode-remote.remote-containers-0.401.0\dist\spec-node\devContainersSpecCLI.js up --user-data-folder C:\Users\bu\AppData\Roaming\Code\User\globalStorage\ms-vscode-remote.remote-containers\data --container-session-data-folder /tmp/devcontainers-d439b38d-9575-465f-b017-2b063a7793541743873714041 --workspace-folder d:\projects\AI\MCP-Server-Unified-Deployment\docker --workspace-mount-consistency cached --gpu-availability detect --id-label devcontainer.local_folder=d:\projects\AI\MCP-Server-Unified-Deployment\docker --id-label devcontainer.config_file=d:\projects\AI\MCP-Server-Unified-Deployment\docker\.devcontainer\devcontainer.json --log-level debug --log-format json --config d:\projects\AI\MCP-Server-Unified-Deployment\docker\.devcontainer\devcontainer.json --default-user-env-probe loginInteractiveShell --mount type=volume,source=vscode,target=/vscode,external=true --mount type=bind,source=\\wsl.localhost\docker-desktop\mnt\host\wslg\runtime-dir\wayland-0,target=/tmp/vscode-wayland-e33353af-2e8e-40b6-8a80-34ea2d195b92.sock --skip-post-create --update-remote-user-uid-default on --mount-workspace-git-root --include-configuration --include-merged-configuration
[2025-04-05T17:21:57.695Z] Exit code 1
[2025-04-05T17:21:57.697Z] Command failed: C:\Users\bu\AppData\Local\Programs\Microsoft VS Code\Code.exe C:\Users\bu\.vscode\extensions\ms-vscode-remote.remote-containers-0.401.0\dist\spec-node\devContainersSpecCLI.js up --user-data-folder C:\Users\bu\AppData\Roaming\Code\User\globalStorage\ms-vscode-remote.remote-containers\data --container-session-data-folder /tmp/devcontainers-d439b38d-9575-465f-b017-2b063a7793541743873714041 --workspace-folder d:\projects\AI\MCP-Server-Unified-Deployment\docker --workspace-mount-consistency cached --gpu-availability detect --id-label devcontainer.local_folder=d:\projects\AI\MCP-Server-Unified-Deployment\docker --id-label devcontainer.config_file=d:\projects\AI\MCP-Server-Unified-Deployment\docker\.devcontainer\devcontainer.json --log-level debug --log-format json --config d:\projects\AI\MCP-Server-Unified-Deployment\docker\.devcontainer\devcontainer.json --default-user-env-probe loginInteractiveShell --mount type=volume,source=vscode,target=/vscode,external=true --mount type=bind,source=\\wsl.localhost\docker-desktop\mnt\host\wslg\runtime-dir\wayland-0,target=/tmp/vscode-wayland-e33353af-2e8e-40b6-8a80-34ea2d195b92.sock --skip-post-create --update-remote-user-uid-default on --mount-workspace-git-root --include-configuration --include-merged-configuration
[2025-04-05T17:21:57.697Z] Exit code 1

And is looking for a socket at:

/run/guest-services/distro-services/docker-desktop.sock

Which doesn’t exist in the Docker Desktop VM.

Expected Behavior

VS Code should successfully create and connect to the development container without attempting to access non-existent socket files.

Additional Notes

  • Regular docker compose up -d commands work fine when run directly in WSL2
  • The issue appears specific to how VS Code’s Remote-Containers extension interacts with Docker Desktop in WSL2 mode
  • The extension seems to be adding additional mounts that conflict with the WSL2 environment

This issue prevents using VS Code’s development containers feature with Docker Desktop on WSL2.

Docker will be available in a WSL distro only if you enable WSL integration in Docker Desktop settings. HAve you done that?

The daemon is running in its own WSL distribution so if you see a docker daemon running, you also installed Docker CE inside the WSL2 distribution You have to decide which one you want to use. Docker Desktop or Docker CE.