Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Serial device mapped with usbipd-win has wrong group/permissions #14251

Open
Clockwork-Muse opened this issue Aug 10, 2024 · 0 comments
Open

Comments

@Clockwork-Muse
Copy link

Clockwork-Muse commented Aug 10, 2024

Description

I'm using devcontainers with docker desktop, and mounting in a barcode reader (a Datalogic GFS4520, as a USB-COM serial device).
I can mount the device to the host distro, and it shows up with ls and lsusb, however it mounts as:

crw-------    1 root     root      166,   0 Aug  9 20:32 /dev/ttyACM0

... and not the proper

crw-rw----    1 root     dialout   166,   0 Aug  9 20:39 /dev/ttyACM0

... which then causes various problems inside my devcontainer.
I can work around this by attaching to another distro (in this case a manual Ubuntu installation). However this is obviously not ideal.

This is less a problem with docker itself and more an issue with setup of the host distro in WSL.

Reproduce

  • Somehow acquire a Datalogic Gryphon 4520 (other serial devices may behave similarly, but this is the device I have)
  • Install usbipd-win via winget install -e --id dorssel.usbipd-win
  • Restart computer
  • The hardware id of the specified Datalogic device is 05f9:4204. If you're using a different device, you can find it via usbipd list
  • Bind the device. From an elevated command prompt run usbipd bind -i <device id>
  • From a normal command prompt, run usbipd attach -i <device id> --wsl docker-desktop
  • Run ls -al /dev/ttyA* from the docker-desktop distro, and observe that the group/permissions are wrong.

Expected behavior

The bound device should have the correct group/permissions.

docker version

Client:
 Version:           27.1.1
 API version:       1.46
 Go version:        go1.21.12
 Git commit:        6312585
 Built:             Tue Jul 23 19:57:57 2024
 OS/Arch:           windows/amd64
 Context:           desktop-linux

Server: Docker Desktop 4.33.1 (161083)
 Engine:
  Version:          27.1.1
  API version:      1.46 (minimum version 1.24)
  Go version:       go1.21.12
  Git commit:       cc13f95
  Built:            Tue Jul 23 19:57:19 2024
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.7.19
  GitCommit:        2bf793ef6dc9a18e00cb12efb64355c2c9d5eb41
 runc:
  Version:          1.7.19
  GitCommit:        v1.1.13-0-g58aa920
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

docker info

Client:
 Version:    27.1.1
 Context:    desktop-linux
 Debug Mode: false
 Plugins:
  buildx: Docker Buildx (Docker Inc.)
    Version:  v0.16.1-desktop.1
    Path:     C:\Program Files\Docker\cli-plugins\docker-buildx.exe
  compose: Docker Compose (Docker Inc.)
    Version:  v2.29.1-desktop.1
    Path:     C:\Program Files\Docker\cli-plugins\docker-compose.exe
  debug: Get a shell into any image or container (Docker Inc.)
    Version:  0.0.34
    Path:     C:\Program Files\Docker\cli-plugins\docker-debug.exe
  desktop: Docker Desktop commands (Alpha) (Docker Inc.)
    Version:  v0.0.14
    Path:     C:\Program Files\Docker\cli-plugins\docker-desktop.exe
  dev: Docker Dev Environments (Docker Inc.)
    Version:  v0.1.2
    Path:     C:\Program Files\Docker\cli-plugins\docker-dev.exe
  extension: Manages Docker extensions (Docker Inc.)
    Version:  v0.2.25
    Path:     C:\Program Files\Docker\cli-plugins\docker-extension.exe
  feedback: Provide feedback, right in your terminal! (Docker Inc.)
    Version:  v1.0.5
    Path:     C:\Program Files\Docker\cli-plugins\docker-feedback.exe
  init: Creates Docker-related starter files for your project (Docker Inc.)
    Version:  v1.3.0
    Path:     C:\Program Files\Docker\cli-plugins\docker-init.exe
  sbom: View the packaged-based Software Bill Of Materials (SBOM) for an image (Anchore Inc.)
    Version:  0.6.0
    Path:     C:\Program Files\Docker\cli-plugins\docker-sbom.exe
  scout: Docker Scout (Docker Inc.)
    Version:  v1.11.0
    Path:     C:\Program Files\Docker\cli-plugins\docker-scout.exe

Server:
 Containers: 8
  Running: 2
  Paused: 0
  Stopped: 6
 Images: 30
 Server Version: 27.1.1
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Using metacopy: false
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Cgroup Version: 1
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local splunk syslog
 Swarm: inactive
 Runtimes: io.containerd.runc.v2 runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 2bf793ef6dc9a18e00cb12efb64355c2c9d5eb41
 runc version: v1.1.13-0-g58aa920
 init version: de40ad0
 Security Options:
  seccomp
   Profile: unconfined
 Kernel Version: 5.15.153.1-microsoft-standard-WSL2
 Operating System: Docker Desktop
 OSType: linux
 Architecture: x86_64
 CPUs: 16
 Total Memory: 15.2GiB
 Name: docker-desktop
 ID: a68e1e09-a11e-4ab3-83ae-858ffbc20b6b
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 HTTP Proxy: http.docker.internal:3128
 HTTPS Proxy: http.docker.internal:3128
 No Proxy: hubproxy.docker.internal
 Labels:
  com.docker.desktop.address=npipe://\\.\pipe\docker_cli
 Experimental: false
 Insecure Registries:
  hubproxy.docker.internal:5555
  127.0.0.0/8
 Live Restore Enabled: false

WARNING: No blkio throttle.read_bps_device support
WARNING: No blkio throttle.write_bps_device support
WARNING: No blkio throttle.read_iops_device support
WARNING: No blkio throttle.write_iops_device support
WARNING: daemon is not using the default seccomp profile

Diagnostics ID

0367124B-409E-4810-9084-D63AB8576470/20240810171012

Additional Info

Possibly related to #13940

My devcontainer is using a compose file which contains the following:

services:
  app:
    image: mcr.microsoft.com/devcontainers/dotnet:1.1.9-8.0-bookworm
    ports:
      - "5020:5020"

    # Overrides default command so things don't shut down after the process ends.
    command: sleep infinity
    group_add:
      - dialout # Required for accessing serial devices
    devices:
      - /dev/ttyACM0

... but that of course only adds the group to the container user, not modify the group on the device in the container (and of course can't change the group on the host, which would be more relevant).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants