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

我的 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 runningready to handle connections。不管怎樣,我不想胡亂做一些我不完全理解其後果的改變。因此,如果有人能解釋發生了什麼,那就太好了。

相關內容