Docker 如何设置自动重启
时间: 2024-06-07 16:02:51 浏览: 231
Docker 可以通过添加 `--restart` 标志来设置容器自动重启。该标志允许您指定在容器退出时如何重新启动它。下面是 `--restart` 标志的几个选项:
1. `no`:默认选项,不重启容器
2. `always`:无论退出代码是什么,始终重启容器
3. `on-failure`:仅在退出代码非零时重启容器
4. `unless-stopped`:除非手动停止容器,否则始终重启容器
例如,要将名为 `my_container` 的容器设置为自动重启,您可以运行以下命令:
```
docker run --restart=always my_container
```
如果您想在已经运行的容器上设置自动重启,您可以使用以下命令:
```
docker update --restart=always my_container
```
相关问题
设定时间docker容器自动重启
在Docker中,通常容器会在应用或服务崩溃时自动重启。如果你希望无论容器内部运行的服务是否崩溃,容器都能在特定时间自动重启,可以通过一些额外的脚本或工具来实现这个功能。
一个简单的方法是使用`crontab`结合`docker`命令来定时重启容器。首先,你需要编写一个脚本,这个脚本会检查容器的状态,并在需要的时候重启容器。然后,你可以将这个脚本设置为定时任务执行。
以下是实现该功能的基本步骤:
1. 编写一个Shell脚本,脚本内容大致如下:
```bash
#!/bin/bash
# 检查容器是否在运行
container_name="你的容器名"
# 如果容器不在运行,则启动容器
if ! docker inspect -f '{{.State.Running}}' "$container_name" > /dev/null 2>&1; then
docker start "$container_name"
fi
```
2. 将这个脚本保存到一个文件中,比如`restart_container.sh`。
3. 设置Cron定时任务,以root用户的身份编辑crontab文件:
```bash
sudo crontab -e
```
4. 添加一行定时任务来定期执行你的脚本。例如,如果你想每天凌晨3点自动检查并重启容器,可以添加如下行:
```bash
0 3 * * * /path/to/restart_container.sh > /dev/null 2>&1
```
确保将`/path/to/restart_container.sh`替换为你的脚本实际的路径。
5. 保存并退出编辑器,Cron将自动加载新的定时任务。
需要注意的是,这种方法并不是Docker官方推荐的做法,因为Docker原生的容器重启策略已经很强大,通常用于处理大多数的自动重启需求。如果容器内部的服务应该在出错后自行重启,那么应该在容器内或容器镜像中进行设置,而不是依赖外部脚本来实现。
docker容器自动重启,如果启动任务有feign调用其他容器,如何保证容器启动顺序
要保证Docker容器启动顺序,可以通过Docker Compose或Docker Swarm等编排工具来实现。
在Docker Compose中,可以使用`depends_on`关键字来指定容器启动的依赖关系。例如,如果一个容器需要先启动另一个容器,可以在docker-compose.yml文件中添加以下配置:
```
version: '3'
services:
service1:
image: 'service1:latest'
restart: always
service2:
image: 'service2:latest'
restart: always
depends_on:
- service1
```
在上面的示例中,`service2`容器依赖于`service1`容器,因此Docker Compose会在启动`service2`之前先启动`service1`。如果`service1`容器崩溃并自动重启,Docker Compose会确保在启动`service2`之前重新启动`service1`。
在Docker Swarm中,可以使用`--depends-on`参数来指定服务之间的启动顺序。例如,如果一个服务需要依赖于另一个服务,可以使用以下命令启动服务:
```
docker service create --name service1 --replicas 1 --restart-condition any service1:latest
docker service create --name service2 --replicas 1 --restart-condition any --depends-on service1 service2:latest
```
在上面的示例中,`service2`服务依赖于`service1`服务,因此Docker Swarm会在启动`service2`之前先启动`service1`。如果`service1`服务崩溃并自动重启,Docker Swarm会确保在启动`service2`之前重新启动`service1`。
当容器内部有Feign调用其他容器时,可以通过在容器启动时等待所依赖的容器就绪来保证容器启动顺序。可以在启动脚本中使用`curl`等命令检查所依赖的服务是否已经启动。只有当所依赖的服务已启动并响应时,才启动当前容器。这样可以确保容器启动顺序,并且避免Feign调用失败的问题。
阅读全文