Linux inotify 与 Docker 的结合实践
一 基本原理与适用场景
二 快速上手 容器内监听挂载目录
FROM alpine:latest
RUN apk add --no-cache inotify-tools bash
WORKDIR /app
CMD ["/bin/sh"]
docker run -it --rm \
-v /host/data:/app/data \
your-inotify-image \
inotifywait -m -e create,modify,delete,move,close_write \
--format '%w%f %e' /app/data
三 典型实战模式
文件变更触发容器重建(开发态热部署)
#!/usr/bin/env bash
SRC=/opt/app
inotifywait -mr --timefmt '%d/%m/%y %H:%M' --format '%T %w %f' -e close_write "$SRC" |
while read DATE TIME DIR FILE; do
echo "[$DATE $TIME] $DIR$FILE changed, rebuilding..."
docker build -t myapp:latest "$SRC"
docker stop myapp || true
docker rm myapp || true
docker run -d --name myapp -p 8080:8080 myapp:latest
done
实时单向同步到远端(rsync + inotify)
#!/usr/bin/env sh
WATCH_DIR=/app/data
RSYNC_TARGET="user@10.0.0.10:/data"
inotifywait -m -e close_write,create,move,delete,modify "$WATCH_DIR" --format '%w%f' |
while read FULLPATH; do
echo "Sync $FULLPATH -> $RSYNC_TARGET"
rsync -avz --delete "$FULLPATH" "$RSYNC_TARGET"
done
四 常见坑与优化建议
以上方案覆盖了“在容器内监听宿主机目录变化”的主流用法,并给出可直接落地的示例与优化要点。根据实际业务选择“重建容器、同步远端、触发构建/部署”等动作,即可将 inotify 与 Docker 高效结合。