我有一个包含Nginx, PhpFpm和Varnish的docker-compose文件。
我的Nginx是这样工作的:用户连接到网站=>Nginx (443) =>清漆(80)=>Nginx (8080) =>Phpfpm:9000或其他…
我的项目工作良好的"depends_on"在docker-compose中配置。但是,对于docker swarm, depends_on会被忽略。
我的问题开始了。
我的Varnish容器,需要Nginx运行,或崩溃,由于主机名定义在配置文件的顶部:
# varnish config file
backend default {
.host = "nginx";
.port = "8080";
.connect_timeout = 10s;
.first_byte_timeout = 10s;
.between_bytes_timeout = 10s;
}
并且,我的nginx需要清漆才能运行,否则它也会崩溃…
# pass to varnish
location / {
proxy_pass http://varnish;
}
upstream varnish {
server varnish:80;
}
所以,清漆崩溃是因为nginx没有启动,而nginx崩溃是因为清漆没有启动。
这个问题有解决办法吗?
Varnish容器失败的原因是nginx
主机名无法解析为IP地址。
在docker-compose.yml
中可以为各种容器分配静态IP地址。请考虑固定IP地址,并将其中一个分配给Varnish后端的.host
属性。
这样可以避免循环依赖。即使IP地址还不存在,Varnish也不会抱怨。Varnish仅在发生缓存丢失或缓存绕过时连接到后端。