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

有什么方法可以在AWS Beanstalk上的Docker容器之间进行双向通信?

堆栈即时尝试工作是非常标准的: 清漆 – > Nginx – > PHP-FPM

我使用链接规范来指定nginx应该find主机名“php-app”。 Nginxfindphp-app的主机名 ,这样工作。 但是我也需要“php-app”才能parsing主机名“varnish”,所以“php-app”可以发送PURGE请求caching失效。

现在基本上只有这种沟通是有效的:

[varnish:80] – > [nginx:8080] – > [php-app]

但是,这应该是工作:

[varnish:80] – > [nginx:8080] – > [php-app] — PURGE —> [varnish:80]

php应用程序基本上只需要知道清漆主机的IP,但是这似乎是不可能的。

我知道我也可以从主机获得清漆容器IP,但我想要做的只是从PHP的应用程序容器相同:

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

简单地说,您需要从其他人那里获取一个容器。 你只需要使用networking别名。 我没有看到您的networkingconfiguration泊坞窗,但如果您的图像使用“默认”networking。

 varnish: image: newsdev/varnish:4.1.0, networks: default: aliases: - "varnish.local" 

您可以将“varnish.local”更改为任何有效的主机名。 从“默认”networking中的其他容器,此容器将可用于ping varnish.local

你可以在这里阅读更多: https : //docs.docker.com/compose/compose-file/#aliases