{"id":37092751,"url":"https://github.com/dguerri/dockerfuse","last_synced_at":"2026-01-14T11:17:08.311Z","repository":{"id":59045055,"uuid":"521642030","full_name":"dguerri/dockerfuse","owner":"dguerri","description":"Interact with filesystem in deployed Docker containers, via FUSE. Blazing fast :)","archived":false,"fork":false,"pushed_at":"2025-09-25T05:16:22.000Z","size":6319,"stargazers_count":24,"open_issues_count":0,"forks_count":3,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-09-25T07:12:27.730Z","etag":null,"topics":["docker","fuse"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dguerri.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.TXT","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-08-05T13:08:06.000Z","updated_at":"2025-09-24T20:04:35.000Z","dependencies_parsed_at":"2023-02-14T03:01:31.435Z","dependency_job_id":"496c42c4-55b8-462d-82bb-ceb803d0aebc","html_url":"https://github.com/dguerri/dockerfuse","commit_stats":null,"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/dguerri/dockerfuse","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dguerri%2Fdockerfuse","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dguerri%2Fdockerfuse/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dguerri%2Fdockerfuse/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dguerri%2Fdockerfuse/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dguerri","download_url":"https://codeload.github.com/dguerri/dockerfuse/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dguerri%2Fdockerfuse/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28418095,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T10:47:48.104Z","status":"ssl_error","status_checked_at":"2026-01-14T10:46:19.031Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","fuse"],"created_at":"2026-01-14T11:17:07.679Z","updated_at":"2026-01-14T11:17:08.304Z","avatar_url":"https://github.com/dguerri.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# DockerFuse: interact with filesystem of Linux Docker containers, via FUSE\n\n[![license](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) [![go report card](https://goreportcard.com/badge/github.com/dguerri/dockerfuse)](https://goreportcard.com/report/github.com/dguerri/dockerfuse) [![CI](https://github.com/dguerri/dockerfuse/actions/workflows/run-CI.yml/badge.svg)](https://github.com/dguerri/dockerfuse/actions/workflows/run-CI.yml) [![Coverage Status](https://coveralls.io/repos/github/dguerri/dockerfuse/badge.svg?branch=main)](https://coveralls.io/github/dguerri/dockerfuse?branch=main)\n\nDockerFuse lets you mount the filesystem of Linux Docker containers locally without installing additional services on the container.\n\n![dockerfuse demo](doc/dockerfuse.gif)\n\n## Build\n\nDockerFuse is built using the provided Makefile. Running `make all` compiles the main `dockerfuse` binary and the architecture specific satellites used inside the container:\n\n```bash\nmake all\n```\n\nThe resulting files are `dockerfuse`, `dockerfuse_satellite_amd64` and `dockerfuse_satellite_arm64`.\n\n## Running\n\nMount the root filesystem of a running container with:\n\n```bash\nsudo ./dockerfuse -i \u003ccontainer id or name\u003e -m \u003cmount point\u003e\n```\n\nSpecify `-path` to mount a sub directory and `-daemonize` to keep the process in the background.\nDockerFuse can connect to remote Docker engines using the standard `DOCKER_HOST` environment variables.\n\n## Makefile targets\n\n- `make test` – run unit tests.\n- `make quality_test` – run go vet, unit tests with coverage, golint and gocyclo.\n- `make interactive_test` – pull the alpine image and mount it under `./tmp` for a quick demo.\n\n## Testing\n\nTo run the unit tests:\n\n```bash\nmake test\n```\n\nTo run an interactive test that spawns an `alpine` container and mounts it under `./tmp`:\n\n```bash\nmake interactive_test\n```\n\nTo invoke Dockerfuse manually:\n\n```bash\ncd \u003cdockerfuse dir\u003e\nmake all\n./dockerfuse -id \u003ccontainer id/name\u003e -mount \u003cmountpoint\u003e\n```\n\n## FAQ\n\n### Q. How does it work?\n\nDockerfuse uploads a small \"server\" on the container (the dockerfs satellite).\nThe satellite and the client (`dockerfuse`) communicate over stdin and stdout via the hijacked connection Docker Engine provides through `ContainerExecAttach()`.\nThis means no additional ports (or software, like ssh) is needed to remotely mount the docker filesystem.\n\nDockerfuse implements operations needed by FUSE through RPC calls and a satellite app. Dockerfuse satellite uses native systemcall (through the Go standard library) on the running container image. For filesystem operations, this is both faster and more flexible than using Docker Engine's API.\n\nThe obvious caveat is that Dockerfuse has to upload a small binary (i.e. ~ 4 MBytes) to the container.\nThe satellite is light-weight also for the computational power requirement, so it shouldn't affect your workload. Of course the actual load depends on the filesystem operations performed (and it should be noted that MacOS issues a huge number of `Getattr()` (STATFS) calls, potentially [affecting FUSE performances](https://github.com/hanwen/go-fuse#macos-support)).\n\n### How is it different from other similar software?\n\nLet's take two popular alternative implementations, Plesk's [plesk/docker-fs](https://github.com/plesk/docker-fs) and Microsoft's [Docker VSCode extension](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-docker) filesystem browsing.\n\nPlesk's Docker-fs uses the Docker Engine to provide access to the container's filesystem, and that has important limitations.\nTo name some: Docker-fs has to download the whole container image on start (using it as a tar FS with FUSE) and use it as a tar-based FS with FUSE (making initial access very slow). It cannot create empty directories, and it cannot handle large files (read/writes operates on the entire file).\n\nMS's Docker VSCode extension has many features, and it's perfectly integrated in VSCode. For filesystem browsing, it uses [Microsoft vscode-container-client](https://www.npmjs.com/package/@microsoft/vscode-container-client), which is a reusable Node.js package. It also supports both Linux and Windows containers.\n\nWhen it comes to Linux fs, Microsoft's vscode-container-client npm issues shell commands to the running Docker container and parses the output (e.g., [list files](https://github.com/microsoft/vscode-docker-extensibility/blob/ac9703e17c143eedc069e3daba64e758b3326fd8/packages/vscode-container-client/src/clients/DockerClientBase/DockerClientBase.ts#L1609)). The cons of this approach are obviously that the container needs to have those commands and their output should be understood by microsoft/vscode-container-client.\n\nIn short, microsoft/vscode-container-client won't work on distroless containers or containers that don't include a shell (and the commands output parsing can be fragile).\n\n### Q. Does it work on remote Docker servers?\n\nYeah. Dockerfuse can work on local Docker instances or on remote ones.\nIt uses the environment (i.e., `DOCKER_HOST`, `DOCKER_TLS_VERIFY`, `DOCKER_CERT_PATH`) to connect to the Docker server, and then it operates via TCP(*).\n\n(*) Technically, Dockerfuse uses a TCP connection which is \"upgraded\" from an HTTP connection, similarly to what happens with web sockets.\n\n### Q. Does it work for arm64 containers?\n\nYeah. The makefile creates 2 satellite instances, one for amd64 and one for arm64.\nWhen mounting a remote container, Dockerfuse inspect the related image and uploads the right satellite instance.\n\nThis allows you to mount the filesystem of an arm64 container on an amd64 machine, and the way around.\n\n### Q. Does it work on distroless containers?\n\nYup! Matter of fact Dockerfuse works great on minimal Docker containers, even when there is no shell installed.\n\n### Q. Does it work on Windows containers?\n\nNope. Although it shouldn't be to hard to code, there is no support for Windows containers at this time.\n\n### Q. Does it require root privileges?\n\nYes. Dockerfuse mounts the filesystem directly using FUSE and therefore needs privileges to perform the mount operation. Run it with `sudo` or as a user allowed to mount FUSE filesystems.\n\n### Q. Can I mount only a sub directory of a container?\n\nAbsolutely. Use the `-path` option to specify the directory inside the container that you want to mount.\n\n## License\n\nApache License v2. See LICENSE.TXT for details.\n\n## Author\n\nDavide Guerri \u003cdavide.guerri@gmail.com\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdguerri%2Fdockerfuse","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdguerri%2Fdockerfuse","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdguerri%2Fdockerfuse/lists"}