有没有办法在 AWS Beanstalk 上的docker容器之间进行双向通信?
我试图开始工作的堆栈非常标准: Varnish - > Nginx - > PHP-FPM
我使用links规范来指定nginx应该找到主机名“php-app”。 Nginx找到 php-app主机名,这样才行。但是我还需要“php-app”才能解析主机名“varnish”,这样“php-app”就可以发送PURGE请求缓存失效。
现在基本上只有这种沟通有效:
[清漆:80] - > [nginx:8080] - > [PHP-APP]
然而,这应该有效:
[清漆:80] - > [nginx:8080] - > [php-app] --- PURGE ---> [清漆:80]
php-app基本上只需要了解清漆主机的IP,但这似乎是不可能的。
我知道我也可以从HOST获取清漆容器ip,但我想从php-app容器中做同样的事情:
VARNISH_HASH=`docker ps | grep varnish | sed 's/\|/ /' | awk '{print $1}'`
VARNISH_IP=`docker inspect --format '{{ .NetworkSettings.IPAddress }}' $VARNISH_HASH`
我也尝试添加到php-app容器的链接,但是在部署时导致了错误,我想这是因为存在循环依赖:
"links": [
"varnish"
]
我的相关 Dockerrun.aws.json (容器deifinition文件)如下所示:
{
"AWSEBDockerrunVersion": 2,
"volumes": [
.....
],
"containerDefinitions": [
{
"name": "nginx-proxy",
"image": "nginx",
"essential": true,
"memory": 128,
"links": [
"php-app"
],
"portMappings": [
{
"hostPort": 8080,
"containerPort": 8080
}
],
"environment": [
{
"name": "NGINX_PORT",
"value": "8080"
}
],
"mountPoints": [ .... ]
},
{
"name": "varnish",
"hostname": "varnish",
"image": "newsdev/varnish:4.1.0",
"essential": true,
"memory": 128,
"portMappings": [
{
"hostPort": 80,
"containerPort": 80
}
],
"links": [
"nginx-proxy",
"php-app"
],
"mountPoints": [ .... ]
},
{
"name": "php-app",
"image": "peec/magento2-php-fpm-aws",
"essential": true,
"memory": 1024,
"environment": [
],
"mountPoints": [ .... ]
}
]
}