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 running
und 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.