假设我有一个想要运行的Docker容器,然后我可以调用它
$ docker run ...
一切都很好。是否有一种内置的方法来运行容器,使其在系统崩溃并重新启动时自动重新启动?
如果是的话,这在Docker Compose中也可用吗?
假设我有一个想要运行的Docker容器,然后我可以调用它
$ docker run ...
一切都很好。是否有一种内置的方法来运行容器,使其在系统崩溃并重新启动时自动重新启动?
如果是的话,这在Docker Compose中也可用吗?
当前回答
我想在Windows上实现启动容器启动。
因此,我只是创建了一个在系统引导时启动的计划任务。该任务只是启动“Docker for Windows.exe”(或任何Docker可执行文件的名称)。
然后,所有重新启动策略为“always”的容器将启动。
其他回答
是的,docker有重启策略,比如docker run——restart=always,可以处理这个问题。这也可以在compose中使用。Yml配置文件的重启:始终。
如果你希望容器在没有用户登录的情况下也能启动(比如我只启动了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/
缺省情况下,重启策略为no。
对于已创建的容器,使用docker update更新重启策略。
docker update --restart=always 0576df221c0b
0576df221c0b是容器id。
文档中的更“温和”模式:
docker run -dit --restart unless-stopped <image_name>
启动容器,并将其设置为在系统重新引导时自动重新启动
docker run -d --restart unless-stopped ecstatic_ritchie
其中,ecstasy atic_ritchie是指定感兴趣的容器的示例名称。使用docker ps -a列出所有容器名称。
使特定的运行容器在系统重新启动时自动启动
docker update --restart unless-stopped ecstatic_ritchie
使所有运行的容器在系统重新启动时自动启动
docker update --restart unless-stopped $(docker ps -q)
详见Docker主页