Docker Compose启动前自动执行初始化任务需通过覆盖command实现,如sh -c组合迁移、静态文件收集与启动命令;依赖服务探活需内嵌nc/curl检测脚本,并确保基础镜像预装工具。
容器启动前常需完成数据库迁移、配置生成或依赖服务探活等操作。Docker Compose 本身不提供原生 pre-start 钩子,但可通过 command 覆盖默认入口实现。
docker-compose.yml 中用 sh -c 组合多条命令,例如:command: sh -c "python manage.py migrate --noinput && python manage.py collectstatic --noinput && gunicorn myapp.wsgi:application -b 0.0.0.0:8000"
command: sh -c "while ! nc -z db 5432; do echo 'waiting for db'; sleep 2; done && exec python app.py"nc 或 curl 等工具;否则需在 Dockerfile 中提前安装。Docker Compose 不内置 cron 支持,但可通过独立服务模拟定时作业,避免污染主应用容器。
cronjob),基于轻量镜像(如 alpine 或 python:slim)构建;cron,通过挂载 crontab 文件或使用 entrypoint 注册任务;services:<br> cronjob:<br> image: alpine:latest<br> volumes:<br> - ./crontab:/etc/crontabs/root<br> - ./scripts:/app/scripts<br> command: crond -f -l 2
*/5 * * * * /app/scripts/backup.sh,表示每 5 分钟执行一次。容器收到 SIGTERM 后应释放连接、刷新缓存、提交日志等,避免数据丢失或下次启动异常。
stop_grace_period 延长等待时间(默认 10s):stop_grace_period: 30s
entrypoint 脚本,在接收到终止信号时触发 pre-stop 动作:TERM 信号,执行 curl /shutdown 或关闭连接池后再 exit;kill -9 强制终止——它跳过所有清理逻辑。使用 docker-compose up --build 或 CI/CD 触发更新时,需兼顾配置一致性、滚动平滑性和失败回退能力。
update_config 实现滚动更新,降低中断风险:deploy:<br> update_config:<br> parallelism: 1<br> delay: 10s<br> order: start-first
healthcheck 确保新实例就绪才下线旧实例:healthcheck:<br> test: ["CMD", "curl", "-f", "http://localhost/health"]<br> interval: 30s<br> timeout: 5s<br> retries: 3
docker-compose.yml 纳入 Git 版本控制,每次变更可追溯、可审计、可一键回滚。