AWS ECS: сетевое взаимодействие между контейнером Nginx и PHP-FPM на одном хосте

AWS ECS: сетевое взаимодействие между контейнером Nginx и PHP-FPM на одном хосте

Итак, я провел последние две недели, изучая ECS и пытаясь настроить очень простую задачу с контейнером nginx и приложением PHP в другом контейнере. Кажется, я очень близок к этому, но теперь я получаю эту ошибку об отказе в подключении от nginx: **[error] 29#29: *9 connect() failed (111: Connection refused) while connecting to upstream, client: 172.31.16.34, server: , request: "GET / HTTP/1.1", upstream: "fastcgi://172.17.0.4:8000", host: "##########:48152"**

Вот определение моей задачи из шаблона CloudFormation:

     ContainerDefinitions:
        - Name: nginx
          Cpu: 10
          Essential: true
          Image: ###################
          Memory: 128
          MountPoints:
            - ContainerPath: /var/www
              SourceVolume: my-vol
          PortMappings:
            - ContainerPort: 80
          Links:
            - app
        - Name: app
          Cpu: 10
          Essential: true
          Image: #############
          Memory: 128
          MountPoints:
            - ContainerPath: /var/www
              SourceVolume: my-vol
          PortMappings:
            - ContainerPort: 8000
      Volumes:
        - Name: my-vol
          DockerVolumeConfiguration:
            Scope: task
            Driver: local

Мой Dockerfile nginx:

FROM nginx:alpine
RUN apk update && apk add bash
COPY ./default.conf /etc/nginx/conf.d/default.conf

Файл конфигурации:

server {
    listen 80;
    listen 443;
    index index.php index.html;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /var/www/public;
    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass app:8000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
    location / {
        try_files $uri $uri/ /index.php?$query_string;
        gzip_static on;
    }
}

И мой Dockerfile приложения:

FROM php:8.2-fpm
...
EXPOSE 8000

Итак, вы спросите, почему я использую режим моста? Ну, все примеры, которые я смог найти, использовали режим моста, и я знаю, что это должно быть похоже на использование сетей в Docker, которые я действительно запустил локально, поэтому я подумал, что это выглядит как самое простое решение. Также да, я знаю, что использование Links устарело, но я не смог найти никакой рекомендуемой альтернативы.

Итак, я вижу, что nginx может преобразовать хост приложения в IP-адрес контейнера, поэтому я предполагаю, что проблема, возможно, на стороне PHP-FPM, хотя в журналах моего приложения я вижу fpm is runningи ready to handle connections. В любом случае, я не хочу просто так возиться с внесением изменений, последствия которых я не до конца понимаю. Так что если бы кто-нибудь мог объяснить, что происходит, было бы здорово.

Связанный контент