v0.10.0
psviderski/uncloudv0.10.0Aug 4, 2025by psviderski
AI Summary
Release v0.10.0 introduces new machine management commands (`rm`, `rename`, `update`) and extends Docker Compose support with placement constraints and pull policy handling. This release also includes important bug fixes for UFW firewall IPv6 support and race conditions during cluster initialization and Docker network creation.
Key Highlights
- New machine management commands: `uc machine rm`, `uc machine rename`, and `uc machine update` for cluster management
- Docker Compose enhancements: `x-machines` placement constraints and proper recreation of containers with `pull_policy: always`
- Bug fix for UFW firewall: properly allows IPv6 management traffic during machine initialization
- Fixed race condition during cluster initialization by waiting for corrosion service to be ready
- Fixed race condition during Docker network creation
New Features
- Added `uc machine rm` command to remove machines from the cluster and reset them to a clean state
- Added `uc machine rename` command to rename machines
- Added `uc machine update` command to update public IP address for DNS registration
- Support for `x-machines` placement constraints in Compose files to control service deployment
- Containers with `pull_policy: always` are now properly recreated on deployment
- Support for standard compose ports directive with ingress mode by default
- Disabled masquerading for container IPs when communicating via WireGuard overlay network
- New blog post: How to connect Docker containers across multiple hosts with WireGuard
Full Release Notes
This release introduces new machine management commands (`rm`, `rename`, `update`) and extends Docker Compose support. Also, includes important bug fixes for machines using UFW firewall and race conditions during cluster initialisation. ✨ We also launched a new blog and published our first post: [How to connect Docker containers across multiple hosts with WireGuard](https://uncloud.run/blog/connect-docker-containers-across-hosts-wireguard) ## Upgrade to 0.10.0 ### Uncloud CLI locally To upgrade the Uncloud CLI (`uc`) locally: ```bash # Homebrew (macOS, Linux) brew upgrade uncloud # Install script (macOS, Linux) curl -fsS https://get.uncloud.run/install.sh | sh ``` ### Machine daemon To upgrade the Uncloud daemon on your machines, run the following commands on each machine: ```bash # AMD64 curl -fsSL -o uncloudd.tar.gz https://github.com/psviderski/uncloud/releases/download/v0.10.0/uncloudd_linux_amd64.tar.gz # ARM64 # curl -fsSL -o uncloudd.tar.gz https://github.com/psviderski/uncloud/releases/download/v0.10.0/uncloudd_linux_arm64.tar.gz tar -xf uncloudd.tar.gz sudo install uncloudd /usr/local/bin/uncloudd rm uncloudd uncloudd.tar.gz sudo systemctl restart uncloud ``` ## New features ### Machine management * Added `uc machine rm` command to remove machines from the cluster and reset them to a clean state. * Added `uc machine rename` command to rename machines. * Added `uc machine update` command to update a public IP address of a machine used for registering machines in Uncloud DNS service (`uc dns`). ### Docker Compose enhancements * Support for `x-machines` placement constraints in Compose files, allowing you to control which machines services are deployed to (#90). * Containers with `pull_policy: always` are now properly recreated on deployment to ensure the latest image is used (#100). ## Bug fixes * Fixed machine initialisation when UFW firewall is active by properly allowing IPv6 management traffic (#65). * Resolved race condition during cluster initialisation by waiting for the corrosion service to be ready with schema applied (#89). * Fixed race condition that could occur during Docker network creation. ## Improvements * Disabled masquerading for container IPs when communicating via WireGuard overlay network. ## Contributors Special thanks to our contributors for this release: * @OrlovEvgeny - Multiple features including machine management and placement constraints * @tonyo - Linting configuration and Docker Compose enhancements ## Changelog * da3634b690eb4917bae03d4cc0b763152fed729d E2E tests use repeated strings for test data where constants add no value (#97) * 2d73b541c52da6808af6d6c6caf64dd26a510008 blog: proof read WireGuard overlay post, update blog description tag * 9b48003a3fb222a9941144fddf210dae44627ab3 blog: set diagram as og image for wireguard overlay post * 05d00784513c096eb15a0d7d1014eecfdd6bf1ec chore: Enable more linters * 1e750cc7e161558de5133603b32315a71dc820c8 chore: add Blog links on landing page, fix header on small screens * 614212a24cd4a94d185907f8237eb220a95fea43 chore: clean up custom iptables chains on machine reset * 0bd42b2fcaa4f213ad7c2aa9cf34680ca175bc5b chore: do not allow to remove a machine the client is connected to, add --no-reset flag * b39585df4cf15e20da96e99e4572df4aa8f62418 chore: do not masquerade container IPs when communicating via WG mesh * a7273c8c96da26f5ddb5999489ada21ebb720347 chore: fix wide svg rendering on landing * 8beb9e2679461ec23db71d165dcab2a1cfc55af8 chore: lint * f613d3ce6d53f74127833922c80bad44dc3f73e3 chore: reformat code * 2acfafe21835c5ec1cbecd2625040854847cb573 chore: regenerate proto * 3faaac4da7b8e4ab100e13de660a00bddaf21589 chore: run machine tests in parallel * 9a88e914f43a2f5729fcec30f5bb812eda9da5e3 chore: simplify cluster controller initialisation, prepare for reset * b24b55c4c700b8a618a1996a00e187936fdc9003 chore: update api.MachineClient interface * 1b6130447f4b254dbe9ca9fdf6c8dbca9cc5270e chore: use a new uncancelled context for stopping corrosion service * a54555cd136c584f4fd209014e978523fc72c4dd feat(deploy): Recreate container when pull_policy set to Always (#100) * 053d73048c0798459aabd440ffb0a8423b0d266c feat: Basic linting config * 2714587ec5e75cd8604fbb960ef4091628b21b64 feat: add RemoveMachine API endpoint to remove a machine from the cluster * fea7edcbc5858c60458a5c2fbf52eaa197ab84e4 feat: add support for standard compose ports directive (#95) * 6fb07db4b2309691ade28f01c4b2fb1ce3975148 feat: follow-up compose 'ports' support: use ingress mode by default (closes #81) * 2c3bea64e52915d3257e82b58fa587f5717e928b feat: impl of functionality for renaming and updating machines (#91) * 7a6c5bf6d7322fadcbd2985879bb0ee874470deb feat: machine Reset endpoint with asynchronous resource and data cleanup * 65f5a714ddb9ad99006b7e85b709566ddcbe385e feat: machine rm command to remove a machine from the cluster and reset it * 31cd4c77e966e3924d867f4ae2f6ee7294f99b05 feat: support x-machines placement constraints in compose files (#90) * 35d0a9012549d65b298385777b151c7ca1f3a6ad fix: add machine with UFW firewall (allow ipv6 management traffic) fixes #65 * ff7bb25f2c68d19c70f88748fef068272a28b62b fix: custom version handling in install.sh script * 3ab708a4370a9ff516ab11ca4b5de53d74fb30e5 fix: graceful machine shutdown when not initialised * 0c2ff499c6245f032cc9617086fcb042dc236cd8 fix: log message deleting iptables chain * 492a0af2b2d282d51f2b3390f4aa5b94939576c5 fix: migration script for uncloud Docker network to be compatible with Docker 28.2.0+ * 10bbe9fbc5f8aabb7e980bc7d4205e70b7902a72 fix: prevent race condition with Docker network creation (#89) * 4166474ee822ae9d548990d407023ae6bc68a913 fix: race on cluster init by waiting for corrosion service to become ready with schema applied