Простое PHP приложение не запускается в ECS с Docker Compose и NGINX - PullRequest
1 голос
/ 28 января 2020

У меня очень простое PHP приложение, созданное с использованием Docker Создание с использованием NGINX и Busybox. Локально работает нормально, но я не могу заставить его правильно запускаться в контейнере на AWS ECS. Структура приложения выглядит следующим образом:

Root
--conf
  nginx.conf
  php.ini
  supervisord.conf
--logs
--sites
  default.vhost
--www
  --default
    index.php
aws-compose.yml
docker-compose.yml
Dockerfile

Важные файлы:

aws -compose.yml

version: '2'
 services:

  web:
    image: nginx:alpine
    cpu_shares: 100
    mem_limit: 262144000
    restart: always
    ports:
      - "80:80"
      - "443:443"
    links:
      - php
    volumes:
      - /sites:/etc/nginx/conf.d
      - /conf/nginx.conf:/etc/nginx/nginx.conf
    volumes_from:
      - code

  php:
    image: '195367337191.dkr.ecr.us-east-1.amazonaws.com/myapp-php-dev:rv1'
    cpu_shares: 100
    mem_limit: 262144000
    build: .
    restart: always
    working_dir: /var/www
    volumes_from:
      - code

   code:
    image: busybox
    tty: true
    volumes:
      - /www:/var/www

Dockerfile:

FROM php:7.1-fpm

RUN pecl install xdebug
RUN docker-php-ext-enable xdebug

COPY conf/php.ini /etc/php/7.1/fpm/conf.d/40-custom.ini

Conf / nginx .conf:

user root;
worker_processes 1;
# daemon off;

error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;

events {
  worker_connections 1024;
}

http {
  include /etc/nginx/mime.types;
  default_type application/octet-stream;

  log_format main '$remote_addr - $remote_user [$time_local] "$request" '
          '$status $body_bytes_sent "$http_referer" '
          '"$http_user_agent" "$http_x_forwarded_for"';

  access_log /var/log/nginx/access.log main;

  sendfile on;
  tcp_nopush on;

  keepalive_timeout 65;

  gzip on;

  include /etc/nginx/conf.d/*;
}

Conf / php .ini:

; Enable XDebug
zend_extension = xdebug.so

; XDebug configuration
xdebug.remote_enable = 1
xdebug.renite_enable = 1
xdebug.max_nesting_level = 1000
xdebug.profiler_enable_trigger = 1
xdebug.profiler_output_dir = "/var/log"
date.timezone = "America/New_York"
; Show PHP errors
display_errors = 1

Conf / supervisord.conf:

[supervisord] nodaemon = true

[program:nginx]
command = /usr/sbin/nginx
user = root
autostart = true

[program:php7-fpm]
command = /usr/sbin/php-fpm7.0 -FR
user = root
autostart = true

Sites / default.vhost:

server {
  server_name default;
  root        /var/www/default;
  index       index.html index.php;

  client_max_body_size 100M;
  fastcgi_read_timeout 1800;

  location / {
    try_files $uri $uri/ /index.php$is_args$args;
  }

  location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
    expires       max;
    log_not_found off;
    access_log    off;
  }

  location ~ \.php$ {
    try_files     $uri =404;
    include       fastcgi_params;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_pass  php:9000;
  }
}

Кажется, проблема связана со ссылками в разделе томов службы "web" в aws -compose.yml, когда я их полностью удаляю, контейнер запускается, но показывает стандартную Nginx страницу «требуется настройка». С ними на месте, как показано ниже:

    volumes:
      - /sites:/etc/nginx/conf.d
      - /conf/nginx.conf:/etc/nginx/nginx.conf

Я получаю следующую ошибку в разделе задач AWS ECS в разделе "остановлено":

Причина состояния CannotStartContainerError: Ошибка ответа от демона : Ошибка создания среды выполнения OCI: container_ linux. go: 345: запуск процесса контейнера вызван \\ "/ conf / nginx .conf \\" to rootfs \\ "

Для информации в моем локальном файле docker -compose.yml ссылки приведены ниже:

  - ./sites:/etc/nginx/conf.d
  - ./conf/nginx.conf:/etc/nginx/nginx.conf

Но эти ошибки, когда я включаю его на AWS, заявляя, что синтаксис не соответствует требуемому шаблону RegEx.

Кто-нибудь может помочь?

...