使用docker swarm模式时遇到了一些问题。
我希望通过swarm模式获得高可用性。 我想我可以通过滚动更新swarm来做到这一点。
像这样......
docker service update --env-add test=test --update-parallelism 1 --update-delay 10s 6bwm30rfabq4
但是有一个问题。 我的码头图像有入口点。因此,在服务之前有一点延迟(我的意思是泊坞容器)真的很快。但是,docker服务只是认为该服务已经在运行,因为容器的状态是“Up'”。即使是服务仍然在入口点做一些工作。因此,当我尝试连接服务时,某些容器返回错误。
例如,如果我创建名为' test'的docker服务。并使用端口8080扩展到4.我可以在Web浏览器上访问test:8080。我尝试使用--update-parallelism 1 --update-delay 10s
选项滚动更新。之后我尝试再次连接服务..一个容器返回错误..因为Docker服务认为容器已经运行..即使容器仍然没有因为入口点而上升。并且在10s之后另一个容器返回错误..因为更新已启动且docker服务也认为容器已经启动。
那么..有什么解决方案可以解决这个问题吗? 我是否应该为断开与错误容器的连接进行一些nginx设置并重新连接另一个?
答案 0 :(得分:1)
HEALTHCHECK Dockerfile命令适用于此用例。您可以指定Docker如何检查容器是否可用,并在更新期间使用它以及检查Swarm中的服务级别。
这里有一篇很好的文章:Reducing Deploy Risk With Docker’s New Health Check Instruction。