当前位置:首页 >  站长 >  建站经验 >  正文

容器启动顺序乱成一锅粥?Compose依赖、健康检查和一键启停

 2026-08-30 18:34  来源: 互联网   我来投稿 撤稿纠错

  一键部署OpenClaw

站稍微复杂一点,容器就不止三个:Web、PHP、MySQL、Redis,再加个定时任务的容器。用docker run一个个敲,重启顺序错一次就一堆报错——PHP比MySQL先起来,连接失败直接崩。Compose的价值就是把这套依赖关系写进配置,一键按正确顺序拉起。

关键是depends_on加健康检查。只写depends_on只保证启动顺序,不保证MySQL真的能接连接了。加上healthcheck,PHP容器会等MySQL真正就绪才启动,重启风暴就没了。

services:
mysql:
image: mysql:5.7
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-p密码"]
interval: 10s
timeout: 5s
retries: 5
redis:
image: redis:7-alpine
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
php:
image: php:8.2-fpm
depends_on:
mysql:
condition: service_healthy # 等健康检查通过,不只是启动
redis:
condition: service_healthy

常用命令就那么几个,记住够用:up -d后台启动,down停掉(down不加-v别乱加,-v会把卷删了,数据全没),ps看状态,logs -f跟日志,restart单个服务重启。

docker compose up -d # 后台整套启动
docker compose ps # 状态+健康检查结果
docker compose logs -f php # 盯某个服务的日志
docker compose restart php # 只重启php
docker compose down # 停掉全部(数据卷保留)

还有个提升很大的习惯:把PHP的自定义配置、Nginx配置全部用volumes挂载进去,别在容器里改文件。容器的设计哲学就是用完即扔,你在容器里改的任何东西,镜像一更新、容器一重建,全没了。

验证编排质量的方法:docker compose down && docker compose up -d,从零拉起到网站可访问应该在30秒内完成;再模拟MySQL异常,docker stop mysql,看PHP是报错降级还是直接雪崩,这决定你半夜收到报警时还有多少回旋余地。

多说一句,网上教程喜欢搞一个compose文件塞七八个服务,新手照抄完发现排查困难。我的经验是按业务边界拆,网站一套、监控一套、工具一套,每套独立目录独立compose,出了问题影响面小,也好定位。

数据来源:Docker官方文档

申请创业报道,分享创业好点子。点击此处,共同探讨创业新机遇!

相关标签
php教程

相关文章

  • 环境配一次崩一次?Docker一条命令拉起LNMP,搬家不再从零开始

    传统装LNMP的痛,装过的都懂:PHP版本、扩展依赖、MySQL配置,换台服务器全部重来一遍,中途各种版本冲突。Docker把整套环境固化成配置文件,机器挂了,新机器上dockercomposeup一条命令,几分钟恢复原样。核心概念就三个:镜像(环境模板)、容器(跑起来的实例)、卷(挂出来的数据目录

    标签:
    php教程
    docker
  • WAF不是大站专利:ModSecurity加OWASP免费规则,老站也能上

    WAF这个词听着像金融级配置,其实开源方案零授权费。ModSecurity是老牌WAF引擎,OWASPCRS是一套社区维护的攻击特征规则,两个加起来能挡住绝大多数SQL注入、XSS、路径穿越扫描。你被WebShell和注入攻击折腾过的站,这套东西值得配一次。Nginx上跑ModSecurity用v3

  • 被CC打挂之前先做这三步:SYN Flood内核参数调优实战

    SYNFlood的原理一句话:攻击者狂发TCP握手第一个包(SYN),但不回第三次握手的ACK,服务器傻等,半连接队列被占满,正常用户的握手请求进不来,表现为网站打不开但机器负载并不高。这种攻击成本极低,一个脚本就能打,站长几乎人人会遇到。先确认是不是这个病:ss-s看一眼,或者netstat-an

  • phpredis扩展装完就完事?连接超时、序列化和长连接三个坑先排掉

    PHP连Redis基本都用phpredis这个C扩展,pecl一键装完,newRedis一句就连上了。但默认配置是给本机测试用的,直接上生产迟早出问题。下面三个坑是我见过翻车率最高的。第一个坑:连接超时没设。默认连接超时是0,意思是永远等。Redis那边要是卡了,PHP进程全在等连接,FPM的wor

  • Redis重启数据全丢?RDB和AOF持久化怎么选,别拍脑袋

    Redis快是真快,代价是数据在内存里,进程一崩、机器一断电,没落盘的数据就没了。站长场景里最疼的两种:一是拿Redis存Session,重启一次全员掉线重登;二是拿它存计数器和队列,重启后数字归零、任务丢失。持久化配置平时没人看,出事才知道疼。Redis给两种持久化方案。RDB是定时快照,每隔一段

    标签:
    php教程

热门排行

信息推荐