【发布时间】:2019-09-06 23:14:58
【问题描述】:
我正在尝试将 traefik 与 docker swarm 一起使用,但在服务更新期间遇到了问题。我运行 stack deploy 或 service update 服务会中断几秒钟
如何重现:
1 - 创建一个 Dockerfile:
FROM jwilder/whoami
RUN echo $(date) > daniel.txt
2 - 构建 2 个演示图像:
$ docker build -t whoami:01 .
$ docker build -t whoami:02 .
3 - 创建一个 docker-compose.yml:
version: '3.5'
services:
app:
image: whoami:01
ports:
- 81:8000
deploy:
replicas: 2
restart_policy:
condition: on-failure
update_config:
parallelism: 1
failure_action: rollback
labels:
- traefik.enable=true
- traefik.backend=app
- traefik.frontend.rule=Host:localhost
- traefik.port=8000
- traefik.docker.network=web
networks:
- web
reverse-proxy:
image: traefik
command:
- "--api"
- "--docker"
- "--docker.swarmMode"
- "--docker.domain=localhost"
- "--docker.watch"
- "--docker.exposedbydefault=false"
- "--docker.network=web"
deploy:
replicas: 1
restart_policy:
condition: on-failure
update_config:
parallelism: 1
failure_action: rollback
placement:
constraints:
- node.role == manager
networks:
- web
ports:
- 80:80
- 8080:8080
volumes:
- /var/run/docker.sock:/var/run/docker.sock
networks:
web:
external: true
4 - 部署堆栈:
$ docker stack deploy -c docker-compose.yml stack_name
5 - 卷曲获取服务响应:
$ while true ; do sleep .1; curl localhost; done
您应该会看到如下内容:
I'm adc1473258e9
I'm bc82ea92b560
I'm adc1473258e9
I'm bc82ea92b560
这意味着负载平衡正在工作
6 - 更新服务
$ docker service update --image whoami:02 got_app
当停机时间应该为零时,traefik 会以 Bad Gateway 响应。
如何解决?
【问题讨论】:
标签: docker deployment load-balancing docker-swarm traefik