使用docker swarm被一个感觉简单的问题难住了,高手进

龙舞飞扬v 2019-06-05 03:05:53
在 swarm 中定义了三个服务:appA、appB 和 nginx。

nginx 的大概配置
location ^~ /abc {
proxy_pass http://hostA:8080;
}

location ^~ /def {
proxy_pass http://hostB:8080;
}
正常情况下是没问题的,nginx 可以很 happy 的运行,但是一旦某个服务比如 appA 重启了,

docker 给 appA 重新分配了个 ip,然后 nginx 就不干了,报错

connect() failed (113: No route to host) while connecting to upstream
然后 appA 一段时间无法提供服务,必须手动 nginx -s reload 才可以重新解析新 ip

而如果是 appA 挂了,还有可能导致整个 nginx 无法启动,连 appB 也无法提供服务了

不知道各路大神有没有好的解决方法呢?

主要是docker 重新拉起的容器可以设置固态ip或者是使用什么方法 动态识别容器ip
...全文
196 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
龙舞飞扬v 2019-06-11
  • 打赏
  • 举报
回复
自己解决了,分享下解决方案,nginx使用容器启动 , 容器之间可以通过容器的名字相互通信的,假设你有个容器叫app,那么nginx如下设置是可以生效的

upstream go {
server app:9500;
}

server {

listen 80;
server_name xxxxxxx;

location /api/ {
proxy_pass http://go;

}

}
li905663280 2019-06-07
  • 打赏
  • 举报
回复
这个时候应该是nginx加consul出场了吧,

1,163

社区成员

发帖
与我相关
我的任务
社区描述
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux 机器上,也可以实现虚拟化。
社区管理员
  • Docker
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧