我已经使用Docker swarm来创建由1个管理员和2个工作人员组成的集群,每个人都在vm上(由docker-machine创建)。 我已经创建了一个" cdn服务"缓存,或将请求传递给后端(一个tomcat容器,在端口8080上)。 我的码头版本是1.13-rc2
这是我的nginx图片的配置文件:
proxy_cache_path /tmp/nginx levels=1:2 keys_zone=my_zone:10m inactive=60m;
proxy_cache_key "$scheme$request_method$host$request_uri";
proxy_cache_methods GET HEAD POST;
proxy_cache_valid 200 206 100m;
proxy_ignore_headers Set-Cookie;
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Allow-Headers' 'Range';
server {
listen 80;
server_name 172.17.0.1;
#charset koi8-r;
#access_log /var/log/nginx/log/host.access.log main;
location = /example-av1.mpd {
add_header 'Access-Control-Allow-Origin' '*';
proxy_cache my_zone;
add_header X-Proxy-Cache $upstream_cache_status;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://172.17.0.1:8700/shaka-player-master/media/example-av1.mpd;
}
}
问题如下: 我创建了名为" mynet"
的覆盖网络当我创建服务时:
docker service create --name nginx-cdn --network mynet --mode global --publish mode=host,target=80,published=9500,protocol=tcp *myimage*
假设我的群集节点是192.168.99.103-104-105,并且服务在端口9500上,
如果我指向192.168.99.103
(或104或105):9500/example-av1.mpd
,则存在502错误网关,而不是将请求重定向到后端。
此问题也适用于docker版本1.12。
我怎么解决这个问题?
答案 0 :(得分:1)
172.17.0.1
似乎是默认的桥接网络,可能不是叠加层。如果后端容器在另一个主机上运行,则nginx容器可以与主机的私有IP或全局IP连接,而不是桥接器。
如果要将后端容器加入同一群集群,可以使用以下命令创建覆盖网络:
docker network create --driver overlay --subnet x.x.x.x/24 foo
然后在同一个覆盖网络中创建服务:
docker service create --network foo ... --name nginx nginx
docker service create --network foo ... --name tomcat tomcat
您还需要在nginx.conf中更新proxy_pass:
proxy_pass http://tomcat:8700/shaka-player-master/media/example-av1.mpd;
覆盖网络的文档如下: