You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* feat: Add rootless Docker support
Implements #547 - Add support for rootless Docker images to avoid permission issues.
Key changes:
- Add Dockerfile.rootless that runs as UID 1000 by default
- Create simplified entrypoint script without chown operations
- Add build-rootless.py to build rootless variants with -rootless suffix
- Document rootless usage in README-ROOTLESS.md
- Update main README with rootless section
The rootless images eliminate common permission problems by:
- Running as non-root from the start (USER 1000:1000)
- Avoiding recursive chown operations that can cause race conditions
- Using open permissions (777) on directories during build
- Not supporting PUID/PGID environment variables
This provides a cleaner solution for rootless Docker users and those
experiencing permission issues with volumes.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <[email protected]>
* fix: Address linting issues in rootless Docker implementation
- Add --no-install-recommends to apt-get install in Dockerfile
- Consolidate consecutive RUN instructions in Dockerfile
- Fix shellcheck warnings: quote variables and use -n instead of \! -z
- These changes improve best practices without affecting functionality
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <[email protected]>
* feat: Add rootless image building to CI pipeline
- Update docker-build.yml workflow to build rootless variants
- Rootless images are built after regular images with -rootless suffix
- Both use the same multi-architecture build process
- Triggered automatically when buildinfo.json changes
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <[email protected]>
* refactor: Unify build system for regular and rootless images
- Create build-unified.py that handles both regular and rootless builds
- Convert build.py and build-rootless.py to wrapper scripts for backwards compatibility
- Update CI workflow to use unified build command
- Add BUILD_MIGRATION.md documentation
- Eliminate code duplication between build scripts
- Support flexible build options: --rootless, --both, --only-stable-latest
This maintains all existing functionality while providing a cleaner, more maintainable build system.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <[email protected]>
* chore: Add Python cache to .gitignore and remove from repo
- Add __pycache__/ and Python compiled files to .gitignore
- Remove accidentally committed __pycache__ directory
- Prevent future Python cache files from being tracked
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <[email protected]>
* refactor: Replace build system with unified solution
- Remove old build.py and build-rootless.py wrapper scripts
- Rename build-unified.py to build.py as the main build script
- Delete BUILD_MIGRATION.md (no longer needed)
- Update CI workflow to use new build.py syntax
- Update documentation in CLAUDE.md and README-ROOTLESS.md
The new build system provides all functionality in a single script:
- Default: builds regular images
- --rootless: builds only rootless images
- --both: builds both regular and rootless images
- --multiarch and --push-tags: work as before
This creates a cleaner, more maintainable build system.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <[email protected]>
* docs: Consolidate rootless documentation and mark as experimental
- Remove separate README-ROOTLESS.md file
- Integrate rootless documentation into main README.md
- Mark rootless support as experimental
- Add clear documentation about limitations and use cases
- Include warning about experimental nature
This consolidates all documentation in one place and makes it clear
that rootless support is still experimental.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <[email protected]>
---------
Co-authored-by: Claude <[email protected]>
Copy file name to clipboardExpand all lines: README.md
+53Lines changed: 53 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -450,6 +450,59 @@ stream {
450
450
451
451
If your factorio host uses multiple IP addresses (very common with IPv6), you might additionally need to bind Factorio to a single IP (otherwise the UDP proxy might get confused with IP mismatches). To do that pass the `BIND` envvar to the container: `docker run --network=host -e BIND=2a02:1234::5678 ...`
452
452
453
+
## Rootless Docker Support (Experimental)
454
+
455
+
> **Note**: Rootless support is currently experimental. Please report any issues you encounter.
456
+
457
+
If you're experiencing permission issues or want better security, consider using the rootless images. These images are designed to work seamlessly with rootless Docker installations and avoid common permission problems.
458
+
459
+
### What are Rootless Images?
460
+
461
+
The rootless images differ from regular images in several ways:
462
+
- Run as UID 1000 (non-root) by default
463
+
- No dynamic UID/GID mapping (PUID/PGID not supported)
464
+
- No runtime chown operations
465
+
- All directories created with open permissions during build
466
+
467
+
### Rootless Image Tags
468
+
469
+
Each regular tag has a corresponding rootless version with the `-rootless` suffix:
470
+
-`latest-rootless` (experimental)
471
+
-`stable-rootless` (experimental)
472
+
-`2.0.55-rootless` (experimental)
473
+
474
+
### Quick Start with Rootless
475
+
476
+
```shell
477
+
docker run -d \
478
+
-p 34197:34197/udp \
479
+
-p 27015:27015/tcp \
480
+
-v ~/factorio:/factorio \
481
+
--name factorio \
482
+
--restart=unless-stopped \
483
+
factoriotools/factorio:stable-rootless
484
+
```
485
+
486
+
Key differences:
487
+
- No `chown` command needed
488
+
- No PUID/PGID environment variables
489
+
- Runs as UID 1000 by default
490
+
- No permission issues with volumes
491
+
492
+
### When to Use Rootless Images
493
+
494
+
Consider using rootless images if you:
495
+
- Are running Docker in rootless mode
496
+
- Experience permission issues with volume mounts
497
+
- Want to avoid containers running as root
498
+
- Don't need dynamic UID/GID mapping via PUID/PGID
499
+
500
+
### Limitations
501
+
502
+
- PUID/PGID environment variables are not supported
503
+
- Fixed to UID 1000 (may not match your host user)
504
+
- Experimental feature - may have undiscovered issues
505
+
453
506
## Troubleshooting
454
507
455
508
### My server is listed in the server browser, but nobody can connect
0 commit comments