5

有没有办法在AWS Beanstalk上的 docker 容器之间进行双向通信?

我试图开始工作的堆栈非常标准:Varnish -> Nginx -> PHP-FPM

我正在使用链接规范来指定 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 基本上只需要知道 varnish 主机的 IP,但这似乎是不可能的。

我知道我也可以从主机获取清漆容器 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(容器定义文件)如下所示:

{
  "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":  [ .... ]
    }
  ]
}
4

0 回答 0