-
-
Notifications
You must be signed in to change notification settings - Fork 1
rsync Not Found
rsync: not found
rsync: command not found
exec: "rsync": executable file not found in $PATH
The container running the mirror doesn't have rsync.
`wip sync` needs rsync inside the image.
Install it in your Dockerfile:
RUN apt-get update && apt-get install -y rsync
Or point sync.command at a tool the image already has.
This is the part that trips people up: the answer depends on sync.mode and on which step
failed.
| Step | Container | Image that needs rsync |
|---|---|---|
wip up's pre-boot mirror |
throwaway (always) |
sync.build's tag → sync.image → the primary entry's image |
wip sync / --watch, mode: exec
|
the running primary container | the primary container's image |
wip sync / --watch, mode: run
|
throwaway |
sync.build's tag → sync.image → the primary entry's image |
So under the default sync.mode: exec with no sync.image/sync.build, your app image needs
rsync for both paths — the pre-boot mirror falls back to it too.
wip doctor warns about the half-configured case:
[WARN] sync.image/sync.build only cover `wip up`'s one-time pre-boot mirror … sync.mode: exec's
`wip sync`/`wip sync --watch` run rsync inside the primary container instead, so its image
needs rsync too
Full explanation: Sync Modes.
# Debian/Ubuntu
RUN apt-get update && apt-get install -y rsync && rm -rf /var/lib/apt/lists/*
# Alpine
RUN apk add --no-cache rsyncwip build
wip down && wip up -dSimplest option, and it keeps sync.mode: exec — the fastest mode, since there's no container
start per mirror.
Keep your app image minimal and let wip build a tiny one just for rsync:
sync:
mode: run
build:
dockerfile: |
FROM alpine:latest
RUN apk add --no-cache rsyncBuilt once per wip up / wip sync invocation (not per --watch tick), tagged
wip-sync-<container>:latest unless you set build.tag.
Or point at an image you manage yourself:
sync:
mode: run
image: my-registry/rsync:latestsync.build's tag wins if both are set — don't configure both.
Required under mode: compose, where there's no dependencies: entry to borrow an
image from.
If your image already has something that can mirror a tree with compatible flags:
sync:
command: /usr/local/bin/my-mirrorwip builds the invocation as:
<command> -r -l -t --whole-file [--delete] [--exclude=… …] [options…] /host-src/ /app/
so your tool must accept those flags. In practice this means an rsync-compatible binary
(rsync-from-busybox often is not — check before relying on it).
wip up -d
wip exec which rsync
wip syncIntroduction
Modes
Configuration
- Configuration Reference
- Config File Discovery
- Dependencies
- Networking
- Interactions
- Restart Policies
- Env Files
- Secret Masking
- Dockerignore
- Shadow Build Context
- Source Sync
- Sync Modes
compose.yml support
- Compose File Support
- Compose Build
- Compose Depends On
- Compose Profiles
- Compose Variable Interpolation
Commands
- CLI Command Reference
- wip init
- wip version
- wip doctor
- wip config
- wip build
- wip up
- wip stop
- wip down
- wip exec
- wip run
- wip shell
- wip logs
- wip sync
- wip dispatch
- Global Options
- Debug Output
- TTY Allocation
Guides
- Guides
- Migrating from dip
- Reusing an Existing compose.yml
- Fixing a Slow Boot
- Continuous Sync
- Auto Restarting Containers
- Multi Arch Images
- Using wip in CI
Troubleshooting
- Troubleshooting & FAQ
- FAQ
- Configuration Errors
- WSLC Not Found
- Registry Authentication
- Architecture Mismatch
- Volume Limit Reached
- rsync Not Found
- Reporting Issues
Comparison
Project