AWS Beanstalk中的docker容器之间的交叉通信

时间:2016-04-18 07:41:10

标签: amazon-web-services docker amazon-ecs

有没有办法在 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":  [ .... ]
    }
  ]
}

0 个答案:

没有答案