5

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

0 に答える 0