假设我有一个想要运行的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 OR image hash>

如果你想改变一个正在运行的容器的配置,你应该通过以下方式更新它:

$ docker update --restart=<options> <container ID OR name>

如果你想查看容器的当前策略,首先执行下面的命令:

docker inspect gateway | grep RestartPolicy -A 3

毕竟,不要忘记在系统引导时启用已安装的docker守护进程:

$ systemctl enable docker

要查看重启策略的完整列表,请参见:重启策略

我想在Windows上实现启动容器启动。

因此,我只是创建了一个在系统引导时启动的计划任务。该任务只是启动“Docker for Windows.exe”(或任何Docker可执行文件的名称)。

然后,所有重新启动策略为“always”的容器将启动。

这篇博客文章很好地描述了2021年的答案。默认情况下,docker已安装,但未启用。如果你使用的是最新的Ubuntu(例如20),并且你通过apt安装了docker,你所要做的就是sudo systemctl enable—now docker。

这将启用systemd中的docker服务,如果它还没有启动,就立即启动它。docker服务在安装时不会启动,但任何使用docker套接字的docker命令(例如docker ps)都会导致systemd启动该服务。启用该服务将使其每次都在启动时启动。

如果你希望容器在没有用户登录的情况下也能启动(比如我只启动了VirtualBox虚拟机,不想每次都登录)。下面是我为Ubuntu 16.04 LTS执行的步骤。例如,我安装了一个oracle db容器:

$ docker pull alexeiled/docker-oracle-xe-11g
$ docker run -d --name=MYPROJECT_oracle_db --shm-size=2g -p 1521:1521 -p 8080:8080 alexeiled/docker-oracle-xe-11g
$ vim /etc/systemd/system/docker-MYPROJECT-oracle_db.service

并增加以下内容:

[Unit]
Description=Redis container
Requires=docker.service
After=docker.service

[Service]
Restart=always
ExecStart=/usr/bin/docker start -a MYPROJECT_oracle_db
ExecStop=/usr/bin/docker stop -t 2 MYPROJECT_oracle_db

[Install]
WantedBy=default.target

并在启动时启用该服务

sudo systemctl enable docker-MYPROJECT-oracle_db.service

欲了解更多信息,请访问https://docs.docker.com/engine/admin/host_integration/

文档中的更“温和”模式:

docker run -dit --restart unless-stopped <image_name>