そこで、過去 2 週間、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
私の nginx Dockerfile:
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 でネットワークを使用するのと同じであることはわかっています。実際にローカルで動作していたので、これが最も簡単な解決策だと思いました。また、リンクの使用は非推奨であることはわかっていますが、推奨される代替手段を見つけることができませんでした。
nginx がアプリ ホストをコンテナーの IP アドレスに解決できることがわかったので、問題は PHP-FPM 側にあるのではないかと推測していますが、アプリのログには と が表示されていますfpm is running
。ready to handle connections
とにかく、結果を完全に理解していない変更をいじり回すのは避けたいです。ですから、何が起こっているのか説明してくれる人がいれば、ありがたいです。