docker创建容器一直restart解决

博客介绍了容器不退出的原因,即容器同时只能管理一个进程,要使容器不退出需有进程在前台执行。还给出解决方案,如启动脚本最后进程用前台运行方式,可在脚本后加 /bin/bash 或 tail -f /dev/null ,也可在 dockerfile 写 CMD 后台运行命令 && /bin/bash ,并提供了调试方法。

原因:
容器同时只能管理一个进程,如果这个进程结束了容器就退出了,但是不表示容器只能运行一个进程(其他进程可在后台运行),但是要使容器不退出必须要有一个进程在前台执行。

解决方案:
启动脚本最后一个进程一定要用前台运行方式 即在进程最后不加 &(&表示在后台执行),否则容器退出。

方法1: 可在脚本后加 /bin/bash ,如果还不行,就换为 tail -f /dev/null (实时查看/dev/null)。

方法2: dockerfile文件写CMD 后台运行命令 && /bin/bash

可用调试方法:
docker run -it -d —name 容器名字 docker镜像名 /bin/bash

<think>好的,我现在需要解决用户的问题:如何为已经创建Docker容器设置restart=always策略。用户之前可能已经创建容器但没有使用--restart参数,现在希望修改现有容器的配置。 首先,我记得Docker容器一旦创建,其配置参数不能直接修改。用户可能需要重新创建容器或者使用其他方法。根据引用[3]提到的docker update命令,可能可以直接更新现有容器的重启策略。那这个命令的用法是怎样的呢?用户需要确认他们的Docker版本是否支持docker update。不过,可能有些限制,比如某些参数无法动态修改,可能需要重启服务或者容器。 另外,用户可能不想重新创建容器,因为那样会丢失已有的数据或者需要重新配置。这时候,docker update --restart=always 容器ID可能是一个解决办法。但需要确认这个命令是否真的有效。根据引用[3],确实提到可以使用docker update来设置重启策略,所以应该可行。但需要提醒用户注意,这种方法可能不适用于所有情况,比如某些旧版本的Docker可能不支持。 另一种方法是,如果docker update不适用,用户可能需要先停止并删除现有容器,然后重新运行一个新的容器,并在docker run命令中加入--restart=always参数。但这样需要用户记录原来的容器参数,比如端口映射、卷挂载等,否则重新创建可能会出错。用户可能需要使用docker inspect命令查看原容器的配置,确保新容器配置一致,同时添加--restart选项。 此外,用户可能需要知道如何查看当前容器的重启策略,可以使用docker inspect来检查。例如,docker inspect -f '{{ .HostConfig.RestartPolicy.Name }}' 容器ID,这样能确认是否设置成功。 需要注意,修改Docker的默认存储位置(如引用[2]所述)可能与此问题无关,但用户可能有其他相关配置需要调整,不过当前问题主要集中在重启策略上。因此,回答应集中在如何修改现有容器的重启策略,而不是存储位置的问题。 最后,需要总结步骤,给出两种方法:使用docker update直接更新,或者重新创建容器。同时,提醒用户注意事项,比如Docker版本兼容性和备份数据的重要性。</think>为已创建Docker容器添加$restart=always$策略,可通过以下两种方法实现: --- ### 方法一:通过`docker update`命令直接修改(推荐) 1. **查看容器ID** ```bash docker ps -a # 获取目标容器的ID或名称 ``` 2. **更新重启策略** ```bash docker update --restart=always [容器ID前3位或名称] ``` **示例**:若容器ID为`abc123`,则执行`docker update --restart=always abc` 3. **验证修改结果** ```bash docker inspect -f '{{ .HostConfig.RestartPolicy.Name }}' [容器ID] ``` 若输出`always`则说明设置成功[^3]。 --- ### 方法二:重新创建容器 若`docker update`不生效(如旧版本Docker),需按原配置重建容器: 1. **停止并删除旧容器** ```bash docker stop [容器ID] && docker rm [容器ID] ``` 2. **重新运行容器并添加参数** ```bash docker run -d --restart=always [原容器其他参数如-p/-v] [镜像名] ``` **示例**: ```bash docker run -d --restart=always -p 8080:80 -v /data:/app nginx ``` --- ### 注意事项 1. `docker update`仅修改运行时的配置,需确保Docker服务重启后策略依然生效; 2. 若容器已停止,需先启动容器再执行`docker update`; 3. 使用重建方法时,**务必保留原容器的端口映射、卷挂载等参数**,可通过`docker inspect [容器ID]`查询原配置[^2]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值