mirror of
https://github.com/milvus-io/milvus.git
synced 2026-10-12 02:19:10 +00:00
issue: #51221 related: #49775 ## What this changes - Add a one-shot volume initializer to the CPU and GPU standalone Compose files. - Resolve the numeric UID/GID from the same Milvus image and migrate `/var/lib/milvus` before the non-root server starts. - Write a UID/GID-specific marker only after a successful recursive migration, so large existing volumes are not scanned on every start and interrupted migrations remain retryable. - Prepare the bind mount in `standalone_embed.sh`, including when a previously created container is stopped after a permission failure. - Teach Docker deployment health checks to exclude one-shot services. - Document the ownership and restore contract. The initializer has no network, uses a read-only root filesystem, and mounts only the Milvus data directory. The Milvus server continues to run as `milvus:milvus`. This fixes both fresh rootful-Docker installations, where Docker creates the bind source as `root:root`, and upgrades from root-running images with root-owned data or cache files. It avoids the ineffective image-layer `chmod` approach from #51226 because a bind mount hides image-layer ownership and mode. ## Compatibility - The recursive ownership migration runs once for each image UID/GID. - A failed or interrupted migration does not create the marker and is retried. - Root-running older images can still read and write the migrated files on rollback. - After restoring files owned by another user, remove `.milvus-volume-owner-*` before starting Milvus to rerun migration. ## Validation - `git diff --check` - `bash -n scripts/standalone_embed.sh tests/python_client/deploy/utils.sh tests/python_client/deploy/check_healthy.sh` - `docker compose -f deployments/docker/standalone/docker-compose.yml config --quiet` - `docker compose -f deployments/docker/gpu/standalone/docker-compose.yml config --quiet` - Verified the deployment health-count expressions return the three long-running services. - Simulated the existing release bump regexes and confirmed both init/server image references and `MILVUS_IMAGE` are updated. Container-level startup was not run locally because the Docker daemon is unavailable; the Linux deployment CI must exercise the fresh-install and root-owned upgrade paths. --------- Signed-off-by: Zhikun Yao <[email protected]>
Overview
To test deployment by docker-compose(Both standalone and cluster)
- re-install milvus to check data persistence
- Deploy Milvus
- Insert data
- Build index
- Search
- Stop Milvus
- Repeat from step #1
- upgrade milvus to check data compatibility
- Deploy Milvus (Previous Release)
- Insert data
- Search
- Stop Milvus
- Deploy Milvus (Latest Release/Build)
- Build index
- Search
Project structure
.
├── README.md
├── cluster # dir to deploy cluster
│ ├── logs # dir to save logs
│ └──docker-compose.yml
├── standalone # dir to deploy standalone
│ ├── logs # dir to save logs
│ └──docker-compose.yml
├── scripts
│ ├── action_after_upgrade.py
│ ├── action_before_upgrade.py
│ ├── action_reinstall.py
│ └── utils.py
├── cluster-values.yaml # config for helm deployment
├── test.sh # script to run a single task
└── run.sh # script to run all tasks
Usage
Make sure you have installed docker,docker-compose and pymilvus!
For different version, you should modify the value of latest_tag, latest_rc_tag and Release. Password of root is needed for deleting volumes dir.
single test task
$ bash test.sh -m ${Mode} -t ${Task} -p ${Password}
# Mode, the mode of milvus deploy. standalone or cluster"
# Task, the task type of test. reinstall or upgrade
# Password, the password of root"
run all tasks
$ bash run.sh -p ${Password}
# Password, the password of root"