docker 部署nginx 及应用,都在同一network中,(未指定ip)
nginx配置文件如下,money为 应用容器名
server {
listen 80;# 配置端口
location / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ /index.html =404;
}
location ^~/money/ {
proxy_pass http://money:6954/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
nginx可以正常转发,访问应用没问题..
问题:
当应用容器restart重启后,应用名未改变.应用容器ip改变.这时nginx无法正常转发了,同时nginx日志报无法找到ip(IP为应用容器的第一次启动IP)
(域名已手动隐藏)
2022/11/22 12:32:08 [error] 30#30: *32 connect() failed (113: No route to host) while connecting to upstream, client: 172.18.0.3, server: , request: "GET /money/draw HTTP/1.1", upstream: "http://172.18.0.11:6954//money/draw", host: "域名", referrer: "https://域名/"
2022/11/22 12:32:08 [error] 28#28: *31 open() "/etc/nginx/html/50x.html" failed (2: No such file or directory), client: 172.18.0.3, server: , request: "GET /money/menu HTTP/1.1", upstream: "http://172.18.0.11:6954/menu", host: "域名", referrer: "https://域名/"
各位,不应该正常解析应用名为ip吗?
内部都没有DNS相关的服务的话,你用域名很容易出问题啊,
还有,除非用网络解决方案指定IP,否则IP都会变的,所以如果是同一容器间的访问,就干脆直接 127.0.0.1或者localhost这里来
一旦涉及容器间的访问,关联,就需要网络解决方案,或者 容器编排。
例如在K8S,会有一个专门的DNS组件,比如coredns服务,就是用域名来提供个对外访问。