使用docker stack deploy
,我可以看到以下消息:
Ignoring unsupported options: restart
您可以通过以下方式查看此消息 Joomla compose file available at the bottom of that page。 要启动撰写文件:
sudo docker swarm init
sudo docker stack deploy -c stackjoomla.yml joomla
答案 0 :(得分:7)
对于生产多主机问题,docker-compose
工具使用Compose YAML文件,用于本地(单主机)开发和测试场景,以及Swarm堆栈。
Compose文件中有许多设置仅适用于一个工具或另一个工具(docker-compose up
与docker stack deploy
),因为某些设置特定于开发人员,而其他设置特定于生产群集。可以,他们在那里,并且当包含特定工具将忽略的设置时,您将在任一工具中看到警告。这通常适用于build:
设置(仅限docker-compose)和deploy:
设置(仅限Swarm堆栈)。
这里的整个目标是您可以在两个工具中使用的单个文件,并且在该场景中使用撰写文件的相关部分,而忽略其余部分。
所有这些都可以参考compose file documentation中的个别设置。如果您经常在Compose YAML工作,我建议您始终在此页面上打开一个标签,因为我几乎每天都会引用它多年,因为规格不断变化(我们在3.4+以上)现在)。
默认情况下,docker-compose不会重新启动容器,但如果您设置单一设置restart:
as documented here,则可以。但是这种设置对于Swarm Stacks并不起作用。它会在docker stack deploy
中显示为警告,提醒您该设置不会在Swarm堆栈中生效。
Swarm Stacks使用restart_policy:
设置which gives finer control with multiple sub-settings下的deploy:
。与所有Stack一样,默认值不必在撰写文件中指定,并且您将在该文档页面上看到其默认设置。
settings that won't work in a Swarm Stack的该页面上有一个列表,但它看起来不完整,因为restart:
设置也应该存在。我会提交一份公关来解决这个问题。
此外,在Joomla示例中,您也指出了我们,README似乎也已过时,因为它在撰写示例中包含links:
,这是depreciated as of Compose version 2,不再需要(因为现在,自定义虚拟网络上的所有容器都可以相互访问。
答案 1 :(得分:3)
如果您在独立模式下在Docker主机上docker-compose up
应用程序,那么Compose所做的就是启动容器。一旦创建这些容器,它就不会监视它们的状态。
因此,如果容器死亡,您需要确保您的应用程序仍然有效。您可以通过设置 restart-policy 来执行此操作。
如果将应用程序部署到具有docker stack deploy
的Docker群中,则情况会有所不同。
创建包含服务规范的堆栈。
然后,Docker swarm确保对于堆栈中的每个服务,始终运行指定数量的实例。如果容器出现故障,swarm将始终生成一个新实例,以便再次匹配服务规范。在这种情况下, restart-policy 没有任何意义,并且忽略了撰写文件中的相应设置。
如果要以群集模式停止应用程序的容器,则必须使用docker stack rm <stack-name>
取消部署整个堆栈,或使用docker service scale <service-name>=0
将服务扩展为零。