AWS ECS Docker - nginx:在上游找不到 [emerg] 主机

Orl*_*ndo 7 php nginx amazon-web-services amazon-ecs docker

我正在尝试使用 docker 在 AWS ECS 上运行 php + mysql 应用程序。应用栈由mysql、elk、php-fpm和nginx docker容器组成。这些容器都运行在同一台 docker 机器上。当任务启动时,nginx 容器退出并出现以下错误:nginx: [emerg] host not found in upstream "php:9001" in /etc/nginx/conf.d/upstream.conf:1

Nginx Dockerfile:

FROM alpine:3.4

RUN apk add --update nginx

#Clear Cache and Temp Data
RUN rm -rf /var/cache/apk/* && rm -rf /tmp/*

ADD nginx.conf /etc/nginx/
ADD symfony.conf /etc/nginx/conf.d/

RUN echo "upstream php-upstream { server php:9001; }" > /etc/nginx/conf.d/upstream.conf

RUN adduser -D -g '' -G www-data www-data

CMD ["nginx"]

EXPOSE 80
EXPOSE 443
Run Code Online (Sandbox Code Playgroud)

RUN echo "upstream php-upstream { server php:9001; }" > /etc/nginx/conf.d/upstream.conf

php:9001部分引用了在 AWS ECS 任务定义中定义的 php 容器。

nginx.conf:

user www-data;
worker_processes 4;
pid /run/nginx.pid;

events {
  worker_connections  2048;
  multi_accept on;
  use epoll;
}

http {
  server_tokens off;
  sendfile on;
  tcp_nopush on;
  tcp_nodelay on;
  keepalive_timeout 15;
  types_hash_max_size 2048;
  include /etc/nginx/mime.types;
  default_type application/octet-stream;
  access_log off;
  error_log off;
  gzip on;
  gzip_disable "msie6";
  include /etc/nginx/conf.d/*.conf;
  include /etc/nginx/sites-enabled/*;
  open_file_cache max=100;
}

daemon off;
Run Code Online (Sandbox Code Playgroud)

symfony.conf:

server {
    server_name _;
    root /var/www/symfony/web;

    location / {
        try_files $uri @rewriteapp;
    }

    location @rewriteapp {
        rewrite ^(.*)$ /app.php/$1 last;
    }

    location ~ ^/(app|app_dev|config)\.php(/|$) {
        fastcgi_pass php-upstream;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param HTTPS off;
    }

    error_log /var/log/nginx/symfony_error.log;
    access_log /var/log/nginx/symfony_access.log;
}
Run Code Online (Sandbox Code Playgroud)

/etc/php7/php-fpm.conf:

[symfony]
user = nobody
group = nobody
listen = 0.0.0.0:9001
pm = dynamic
pm.max_children = 1000
pm.start_servers = 1
pm.min_spare_servers = 1
pm.max_spare_servers = 3
env[DB_1_ENV_MYSQL_DATABASE] = $DB_1_ENV_MYSQL_DATABASE
env[DB_1_ENV_MYSQL_USER] = $DB_1_ENV_MYSQL_USER
env[DB_1_ENV_MYSQL_PASSWORD] = $DB_1_ENV_MYSQL_PASSWORD
catch_workers_output = yes
Run Code Online (Sandbox Code Playgroud)

我还尝试更改监听listen = /var/run/php-fpm/php-fpm.socklisten = 127.0.0.1:9001更改 nginx 配置的相应更改,但这导致了各种其他错误消息。

Orl*_*ndo 7

我没有在 AWS ECS 任务定义中设置phpnginx容器之间的链接。

要设置容器的链接,请转到NETWORK SETTINGS并在Links字段内输入链接。

  • 使用 awsvpc 时,不使用网桥进行联网,无法设置链接。应该有我正在寻找的另一种方式。 (5认同)
  • @OnurDemir,您应该能够使用“localhost”,因为容器在 awsvpc 中共享网络。[文档](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-networking.html) (2认同)