AWS Beanstalk上の Docker コンテナ間で双方向通信を行う方法はありますか?
作業しようとしているスタックはかなり標準的です: Varnish -> Nginx -> PHP-FPM。
リンク仕様を使用して、nginx がホスト名「php-app」を見つけるように指定しています。Nginx はphp-app hostnameを見つけるので、それが機能します。ただし、「php-app」がホスト名「varnish」を解決できるようにするために「php-app」も必要です。これにより、「php-app」はキャッシュ無効化の PURGE リクエストを送信できます。
基本的に、機能する通信は次のとおりです。
[varnish:80] -> [nginx:8080] -> [php-app]
ただし、これは機能するはずです:
[varnish:80] -> [nginx:8080] -> [php-app] ---PURGE---> [varnish: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 (コンテナ定義ファイル) は次のようになります。
{
"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": [ .... ]
}
]
}