uv pip install deliberately does not fall back to the active interpreter the way pip does. It looks for a virtual environment, via VIRTUAL_ENV or a .venv directory in the working tree or a parent, and if it finds none it errors with a message saying no virtual environment was found rather than installing into whatever python resolves to.
This breaks the common Docker pattern of RUN pip install -r requirements.txt into a base image's site-packages. The explicit opt-in is uv pip install --system, or set UV_SYSTEM_PYTHON=1 once in the Dockerfile environment. UV_PROJECT_ENVIRONMENT pointed at a path is the other way to say exactly where packages should land.
The guard exists because uv is frequently installed globally while projects are per-directory, and a silent system install is hard to undo. Confirm what uv is about to modify with uv pip list --system or uv python find, both of which print the resolved interpreter path before you commit to an install.