因此,我花了两周时间学习 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 中使用网络一样,我实际上是在本地运行的,所以我认为这看起来是最简单的解决方案。另外,是的,我知道使用 Links 已被弃用,但我找不到任何推荐的替代方案。
因此,我可以看到 nginx 能够将应用程序主机解析为容器的 IP 地址,因此我猜测问题可能出在 PHP-FPM 方面,尽管在我的应用程序日志中我看到了fpm is running
和ready to handle connections
。无论如何,我不想只是乱七八糟地进行更改,而我不完全了解其后果。所以如果有人能解释发生了什么,那就太好了。