AWS ECS: Vernetzung zwischen Container Nginx und PHP-FPM auf demselben Host

AWS ECS: Vernetzung zwischen Container Nginx und PHP-FPM auf demselben Host

Ich habe die letzten zwei Wochen damit verbracht, etwas über ECS zu lernen und zu versuchen, eine sehr einfache Aufgabe mit einem Nginx-Container und einer PHP-App in einem anderen Container einzurichten. Es scheint, als wäre ich ganz nah dran, aber jetzt bekomme ich diesen Verbindungsfehler von 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"**

Hier ist meine Aufgabendefinition aus meiner CloudFormation-Vorlage:

     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

Mein Nginx-Dockerfile:

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

Die Konfigurationsdatei:

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;
    }
}

Und mein App-Dockerfile:

FROM php:8.2-fpm
...
EXPOSE 8000

Sie fragen sich also, warum ich den Bridge-Modus verwende? Nun, alle Beispiele, die ich finden konnte, verwendeten den Bridge-Modus, und ich weiß, dass dies wie die Verwendung von Netzwerken in Docker sein soll, was ich tatsächlich lokal zum Laufen gebracht habe, also dachte ich, dass dies die einfachste Lösung zu sein scheint. Und ja, ich weiß, dass die Verwendung von Links veraltet ist, aber ich konnte keine empfohlene Alternative finden.

Ich kann also sehen, dass nginx den App-Host in die IP-Adresse des Containers auflösen kann. Daher vermute ich, dass das Problem möglicherweise auf der PHP-FPM-Seite liegt, obwohl ich in den Protokollen meiner App fpm is runningund sehe ready to handle connections. Jedenfalls möchte ich nicht einfach herumspielen und Änderungen vornehmen, deren Folgen ich nicht vollständig verstehe. Wenn also jemand erklären könnte, was los ist, wäre das großartig.

verwandte Informationen