Bind mounts working in Docker Desktop, but producing empty directories in the Docker CLI

Hi there,

My issue started a few weeks ago. The Docker desktop application began crashing intermittently without any apparent cause. Done everything short of re-installing my OS (several re-installations of docker, refactoring my compose, using single containers instead of a full stack for testing, software updates on software updates, and as much cache-purging as is possible).

So, I decided to move from Docker Desktop on Linux to just using the Docker CLI to manage the docker engine. Everything ported fine, however, I cannot seem to access my bind mounts anymore. I have bind mounts on 2 separate drives, one internal, one external (connected via USB), and no matter what syntax I use for declaring them as bind mounts (short syntax, long syntax, auto-generated syntax from the Portainer web UI), and the bind mounts are always empty. If I switch to docker desktop and share access to the bind mounts through the resource-sharing panel in the Docker Desktop settings, they work totally fine and have all the desired content in them. Only when starting through the CLI are the bind mounts empty, even using the exact same docker run command or compose.yaml file to launch.

I have included a sample of my compose.yaml file for context. I am still relatively new to docker, so please suggest anything, even dumb things!

compose.yaml sample
services:
  portainer:
    image: portainer/portainer-ce:latest
    container_name: portainer
    command: -H unix:///var/run/docker.sock
    environment:
      - TZ
      - PUID
      - PGID
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
      - "portainer_data:/data"
    restart: always
    networks:
      - public
  swag:
    image: lscr.io/linuxserver/swag:latest
    container_name: swag
    cap_add:
      - NET_ADMIN
    environment:
      - PUID
      - PGID
      - TZ
      - URL
      - VALIDATION
      - SUBDOMAINS
      - DNSPLUGIN
      - ONLY_SUBDOMAINS
    volumes:
      - swag:/config
    ports:
      - 443:443
    restart: unless-stopped
    networks:
      - public

  heimdall:
    image: lscr.io/linuxserver/heimdall:latest
    container_name: heimdall
    environment:
      - TZ
      - PUID
      - PGID
    volumes:
      - heimdall:/config
    restart: unless-stopped
    networks:
      - public
    depends_on:
      - swag

  plex:
    container_name: plex
    image: lscr.io/linuxserver/plex:latest
    restart: unless-stopped
    environment:
      - TZ
      - PLEX_CLAIM
      - PUID=1000
      - PGID=1000
      - VERSION=docker
    volumes:
      - plex:/config
      - /plex/media/movies:/movies
      - /plex/media/movies4k:/movies4k
      - /plex/media/tv:/tv
      - /plex2TB/media/tv2TB:/tv2TB
      - /plex2TB/media/movies2TB:/movies2TB
      - /plex2TB/media/movies4kTB:/movies4k2TB
    networks:
      - public
    depends_on:
      - swag
      - heimdall

networks:
  public:
    name: public
volumes:
  portainer_data:
    name: portainer_data
  swag:
    name: swag_config
  heimdall:
    name: heimdall_config
  plex:
    name: plex_config

EDIT: Just remembered, I should note that I have tried making symlinks from within my home directory to my bind mounts and using those paths in my compose to no avail. All the files located within the bind-mount directories are owned by the appropriate user. Also, the compose.yaml is in a directory that is a Git repository as well as a home directory for a user.

Also, unsure if this is the correct location to be posting this, but figured because of my recent switch from Docker Desktop and the fact that my bind mounts still work when using the Docker Desktop socket made it relevant. Thanks!