应使用--restart=unless-stopped策略:新建容器时在docker run中镜像名前加该参数;已有容器用docker update --restart unless-stopped修正;验证通过inspect查看RestartPolicy.Name是否为unless-stopped。

让Docker容器在宿主机重启后自动拉起,但又保留手动停止后不再恢复的控制权,必须使用--restart=unless-stopped策略——它不依赖外部脚本或定时任务,是Docker原生支持的最稳妥方案。
新建容器时直接设置unless-stopped
这一步操作起来很简单,直接在docker run命令末尾加参数即可。
执行:docker run -d --restart unless-stopped --name myapp -p 8080:80 nginx
注意:【--restart必须写在镜像名之前】,否则Docker会把该参数误认为传递给容器内进程,导致重启策略失效。
这条命令启动Nginx容器,并确保它在系统重启后自动运行;如果你之后执行docker stop myapp,它就不会再被拉起。
为已运行的容器补设unless-stopped
已有容器没设重启策略?不用删掉重建,用docker update现场修正。
方法一:按容器名称更新docker update --restart unless-stopped myapp
方法二:按容器ID更新(适合未命名容器)
先查ID:docker ps -aqf "name=myapp" → 得到类似a1b2c3d4的ID → 再执行:docker update --restart unless-stopped a1b2c3d4
这一步不可逆:一旦执行,旧策略立即被覆盖。若想撤销,只能再次docker update --restart no myapp。
验证重启策略是否生效
第一步:检查当前策略名称docker inspect -f '{{.HostConfig.RestartPolicy.Name}}' myapp
第二步:确认最大重试次数为空(unless-stopped不设上限)docker inspect -f '{{.HostConfig.RestartPolicy.MaximumRetryCount}}' myapp
第三步:观察实际行为——重启宿主机或执行sudo systemctl restart docker,容器应在数秒内自动进入Up状态。
如果输出不是unless-stopped,说明前两步中某处拼写错误或容器名填错,需重新执行docker update。


















