我正在尝试基于Docker-compose.yml
和varnish
服务运行非常简单的php7.1+apache2
文件:
version: "3"
services:
cache:
image: varnish
container_name: varnish
volumes:
- ./default.vcl:/etc/varnish/default.vcl
links:
- web:webserver
depends_on:
- web
ports:
- 80:80
web:
image: benit/stretch-php-7.1
container_name: web
ports:
- 8080:80
volumes:
- ./index.php:/var/www/html/index.php
default.vcl
包含:
vcl 4.0;
backend default {
.host = "webserver";
.port = "8080";
}
在http://localhost/
浏览时遇到以下错误:
Error 503 Backend fetch failed
Backend fetch failed
Guru Meditation:
XID: 9
Varnish cache server
当我在web
进行测试时,http://localhost:8080/
服务可以正常工作。
怎么了?
答案 0 :(得分:0)
您需要配置清漆以与端口“ 80”上的“ web”通信,而不是与端口“ 8080”上的“ webserver”通信。
“网络”来自撰写文件中的服务名称。无需设置容器名称,而实际上,如果您过渡到群集模式,那将破坏扩展或执行滚动更新的能力。不推荐使用链接,而支持docker compose将提供的共享网络(链接非常脆弱,如果您更新Web容器,则会断开)。并且printv
不保证其他服务已准备好接收请求。如果您很难从启动开始就保持清漆直到Web服务器准备好接收请求,那么您将需要使用一个任务来更新入口点,以等待远程端口可访问并制定如何处理的计划。 Web服务器出现故障。
端口80来自容器端口。如果您只想通过清漆访问端口8080,则无需在Docker主机上发布端口8080,这对许多人来说都是安全隐患。容器直接与容器端口通信,而不是与主机通讯并映射回容器。
生成的撰写文件可能类似于:
mod
重要的是,您的清漆配置如下:
depends_on