docker创建容器添加启动--restart选项

发布于:2025-04-14 ⋅ 阅读:(20) ⋅ 点赞:(0)

一、通过 Docker 命令直接修改已启动的容器(推荐-已验证)

操作步骤:

1.执行更新命令:

docker update --restart=always <容器名或ID>

此命令会将容器的重启策略调整为 always(无论容器以何种状态退出,均自动重启)。

2.验证是否生效:

docker inspect <容器名或ID> 

在前部分RestartPolicy位置查看到:
若输出显示 “Name”: “always”,则说明修改成功。
在这里插入图片描述

适用场景:

容器处于运行或停止状态均可操作。
无需停止 Docker 服务,操作简单且风险较低。

二、通过修改配置文件(备选方案)

若命令修改无效(如旧版本 Docker 兼容性问题),可手动编辑容器配置文件:

1停止容器及 Docker 服务

docker stop <容器名或ID>  # 停止容器 
systemctl stop docker    # 停止 Docker 服务 

2.修改配置文件:

定位到容器配置目录:/var/lib/docker/containers/<容器ID>/
编辑 hostconfig.json ,找到 RestartPolicy 字段,修改为:

"RestartPolicy": {"Name": "always", "MaximumRetryCount": 0}

部分版本需同步修改 config.v2.json (添加 “RestartPolicy”: {“Name”: “always”})。

3.重启 Docker 服务及容器:

systemctl start docker   # 启动 Docker 服务 
docker start <容器名或ID> # 启动容器 

注意事项:

需确保 Docker 服务完全停止后再修改文件,否则可能导致配置被覆盖。
适用于无法通过命令修改的特殊场景,如 Docker 版本兼容性问题。

三、其他相关建议

重启策略类型:

no:不自动重启(默认)。
always:始终重启。
unless-stopped:Docker 服务重启后自动启动容器,除非容器被手动停止。

端口映射等参数修改:

若需同时调整端口映射或存储路径,需通过 docker commit 生成新镜像并重新创建容器。

总结

推荐优先使用 docker update 命令,简单高效且兼容性强。
修改配置文件适用于调试或特殊环境,但需谨慎操作以避免配置冲突。
可通过 docker inspect 验证参数是否生效。

★★★★★★★★★★★★★★★★★★如何在启动时就配置好?★★★★★★★★★★★★★★★★★★★

一、基本配置方法

在 docker run 命令中直接添加 --restart 参数即可:

docker run -d --restart=策略类型 [其他参数] 镜像名 

支持的策略类型:

no
默认策略,容器退出后不会自动重启。

on-failure
    仅在容器非正常退出(退出状态码非0)时重启。
    可指定最大重试次数,例如 --restart=on-failure:3(最多重启3次)。

always
    无论容器以何种状态退出(包括手动停止),Docker服务重启后都会自动启动该容器。

unless-stopped
    类似 always,但排除 Docker 守护进程启动前已被手动停止的容器。

二、配置示例

1. 始终自动重启

docker run -d --restart=always --name my_nginx nginx 

2. 仅在异常退出时重启(最多5次)

docker run -d --restart=on-failure:5 --name my_app your_image 

3. 排除手动停止的场景

docker run -d --restart=unless-stopped --name my_db mysql 

三、验证配置是否生效

通过以下命令检查重启策略:

docker inspect --format='{{.HostConfig.RestartPolicy.Name}}' 容器名 

输出应为 always、on-failure 或 unless-stopped。

四、注意事项

策略优先级

    手动执行 docker stop 后,always 策略的容器仍会在 Docker 服务重启后自动启动,而 unless-stopped 不会。

资源限制

    频繁重启可能占用资源,建议为 on-failure 设置最大重试次数(如 :3)。

版本兼容性

    unless-stopped 需要 Docker 1.9 或更高版本。

与 --rm 参数冲突

    --restart 不能与 --rm(容器退出后自动删除)同时使用。

五、生产环境推荐方案

长期运行的服务(如 Web 服务器):优先使用 always 或 unless-stopped。
一次性任务或批处理作业:使用 on-failure 并限制重试次数,避免无限重启。

通过合理选择策略,可确保容器在异常退出或宿主机重启后自动恢复运行。