假设我有一个想要运行的Docker容器,然后我可以调用它
$ docker run ...
一切都很好。是否有一种内置的方法来运行容器,使其在系统崩溃并重新启动时自动重新启动?
如果是的话,这在Docker Compose中也可用吗?
假设我有一个想要运行的Docker容器,然后我可以调用它
$ docker run ...
一切都很好。是否有一种内置的方法来运行容器,使其在系统崩溃并重新启动时自动重新启动?
如果是的话,这在Docker Compose中也可用吗?
当前回答
你可以运行一个总是重启的容器:
$ docker run -dit --restart unless-stopped <image name OR image hash>
如果你想改变一个正在运行的容器的配置,你应该通过以下方式更新它:
$ docker update --restart=<options> <container ID OR name>
如果你想查看容器的当前策略,首先执行下面的命令:
docker inspect gateway | grep RestartPolicy -A 3
毕竟,不要忘记在系统引导时启用已安装的docker守护进程:
$ systemctl enable docker
要查看重启策略的完整列表,请参见:重启策略
其他回答
文档中的更“温和”模式:
docker run -dit --restart unless-stopped <image_name>
这篇博客文章很好地描述了2021年的答案。默认情况下,docker已安装,但未启用。如果你使用的是最新的Ubuntu(例如20),并且你通过apt安装了docker,你所要做的就是sudo systemctl enable—now docker。
这将启用systemd中的docker服务,如果它还没有启动,就立即启动它。docker服务在安装时不会启动,但任何使用docker套接字的docker命令(例如docker ps)都会导致systemd启动该服务。启用该服务将使其每次都在启动时启动。
这就是crontab的作用:
@reboot sleep 10 ; docker start <container name> 2>&1 | /usr/bin/logger -t 'docker start'
通过crontab -e访问用户crontab或使用crontab -l显示它或在/etc/crontab编辑系统crontab
这个答案只能作为备份或替代使用本地Docker重启策略和/或SystemD服务单元来控制系统启动时容器的启动。
我觉得我提到这个答案的唯一原因是一种非理性的情绪反应,因为为了使SystemD服务单元方法正常工作,您必须正确处理过于复杂和大量的事情,因为这样一个简单的任务在任何Linux机器上都应该是简单的。
你可以运行一个总是重启的容器:
$ docker run -dit --restart unless-stopped <image name OR image hash>
如果你想改变一个正在运行的容器的配置,你应该通过以下方式更新它:
$ docker update --restart=<options> <container ID OR name>
如果你想查看容器的当前策略,首先执行下面的命令:
docker inspect gateway | grep RestartPolicy -A 3
毕竟,不要忘记在系统引导时启用已安装的docker守护进程:
$ systemctl enable docker
要查看重启策略的完整列表,请参见:重启策略
是的,docker有重启策略,比如docker run——restart=always,可以处理这个问题。这也可以在compose中使用。Yml配置文件的重启:始终。