Docker和Nginxparsing为错误的IP地址

我在DigitalOcean上运行Dokku 0.9.4来托pipe多个Node.js应用程序服务器(应用程序: apicmswww )。 这是我在新鲜的液滴安装上做的事情:

  1. 通过Dokku创build应用程序: dokku apps:create {app-name}
  2. 在我的开发机器上初始化GIT respositories,并成功将所有3个应用程序部署到服务器

此时应用程序工作,直到我重新启动服务器或执行service docker restart 。 这两个问题中的任何一个发生问题后,都会出现。 首先,应用程序不能在一分钟或两分钟之内访问(当我尝试通过{app-name}.domain.tld访问任何这些应用程序时,我得到了502 Bad gateway (由Cloudflare处理的DNS)。决定几分钟后开始工作的应用程序映射似乎混合起来。

例如,如果我尝试打开www.domain.tld实际上是从api应用程序获取响应,同时打开cms.domain.tld返回502 Bad gateway

昨天花了整整一天的时间,试图找出我刚才find的问题的位置,但我不明白为什么会发生这个问题。

运行docker networks inspect bridge给出以下结果:

 [ { "Name": "bridge", "Id": "e9edc54047f3d93b9033706d17fd78355440470a090c8010577cfca6ef767946", "Created": "2017-12-12T09:16:52.784428035Z", "Scope": "local", "Driver": "bridge", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": null, "Config": [ { "Subnet": "172.17.0.0/16", "Gateway": "172.17.0.1" } ] }, "Internal": false, "Attachable": false, "Ingress": false, "Containers": { "28d7242a146a160dafc94b325439b6385bd49155dec9124e501daf88f8744740": { "Name": "www.web.1", "EndpointID": "26f276f07c983755f0baab9999292b23445d4cdf060328e9e1e3cd8914326310", "MacAddress": "02:42:ac:11:00:05", "IPv4Address": "172.17.0.5/16", "IPv6Address": "" }, "32b2a15f8ccaff48e46f707bb9619d7d106fb18a0632483cc6db341d24d5b606": { "Name": "cms.web.1", "EndpointID": "a605bab5af1ec76c802537953b1869116d0ade37bdecf2f76c33c1592ee25b01", "MacAddress": "02:42:ac:11:00:07", "IPv4Address": "172.17.0.7/16", "IPv6Address": "" }, "500bd73a805ef63d9b2eb4589b3abe4316b72f2d7e029d2dfc71886c6f6fc807": { "Name": "api.web.1", "EndpointID": "cd5f8ebd7f2c6dfc8b5828eed1f0a46336415ba8204f9b58270b18ae42aaf357", "MacAddress": "02:42:ac:11:00:08", "IPv4Address": "172.17.0.8/16", "IPv6Address": "" } }, "Options": { "com.docker.network.bridge.default_bridge": "true", "com.docker.network.bridge.enable_icc": "true", "com.docker.network.bridge.enable_ip_masquerade": "true", "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", "com.docker.network.bridge.name": "docker0", "com.docker.network.driver.mtu": "1500" }, "Labels": {} } ] 

但是,如果我检查每个应用程序的内部/home/dokku/{app-name}/nginx.confnginx.conf ,我可以看到问题出在哪里。 例如,app api具有以下nginx.conf

 server { listen [::]:80; listen 80; server_name api.tourlyapp.com; access_log /var/log/nginx/api-access.log; error_log /var/log/nginx/api-error.log; location / { gzip on; gzip_min_length 1100; gzip_buffers 4 32k; gzip_types text/css text/javascript text/xml text/plain text/x-component application/javascript application/x-javascript application/json application/xml application/rss+xml font/truetype application/x-font-ttf font/opentype application/vnd.ms-fontobject image/svg+xml; gzip_vary on; gzip_comp_level 6; proxy_pass http://api-5000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Port $server_port; proxy_set_header X-Request-Start $msec; } include /home/dokku/api/nginx.conf.d/*.conf; } upstream api-5000 { server 172.17.0.5:5000; } 

而应用程序www有以下nginx.conf

 server { listen [::]:80; listen 80; server_name www.tourlyapp.com; access_log /var/log/nginx/www-access.log; error_log /var/log/nginx/www-error.log; location / { gzip on; gzip_min_length 1100; gzip_buffers 4 32k; gzip_types text/css text/javascript text/xml text/plain text/x-component application/javascript application/x-javascript application/json application/xml application/rss+xml font/truetype application/x-font-ttf font/opentype application/vnd.ms-fontobject image/svg+xml; gzip_vary on; gzip_comp_level 6; proxy_pass http://www-5000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Port $server_port; proxy_set_header X-Request-Start $msec; } include /home/dokku/www/nginx.conf.d/*.conf; error_page 400 401 402 403 405 406 407 408 409 410 411 412 413 414 415 416 417 418 420 422 423 424 426 428 429 431 444 449 450 451 /400-error.html; location /400-error.html { root /var/lib/dokku/data/nginx-vhosts/dokku-errors; internal; } error_page 404 /404-error.html; location /404-error.html { root /var/lib/dokku/data/nginx-vhosts/dokku-errors; internal; } error_page 500 501 502 503 504 505 506 507 508 509 510 511 /500-error.html; location /500-error.html { root /var/lib/dokku/data/nginx-vhosts/dokku-errors; internal; } } upstream www-5000 { server 172.17.0.8:5000; } 

除了这个事实,由于某种原因,我不知道www应用程序比api应用程序在nginx.conf有更多的条目,它也表明,IP是混合起来的:

www app的上游IP地址设置为172.17.0.8而这个IP地址是由Docker分配给api应用的。 api应用程序的上游IP地址设置为172.17.0.8 ,这是由Docker分配给它的相同的IP地址

无论我做什么,IP地址仍然搞砸了(我试过dokku nginx:build-config www ,我已经试过做最简单的Node.js应用程序,问题依然存在,我试过新鲜的液滴安装等)。

唯一让所有应用程序正常运行的是运行dokku ps:restart {app-name} 。 这神奇地使其工作,直到下一次服务器重新启动。

有没有人知道这到底是什么错误,因为我浪费了太多的时间来试图解决那些应该是开箱即用的东西。

该解决scheme似乎将Dokku更新到版本0.11.0 ,其中添加了新的插件network ,其中包括在重新启动Docker服务后重buildIP地址。

相关问题: