docker — php-fpm и nginx в одном сбои изображения

Я хочу запустить службы, написанные на php в кластере. Так что я использую докер.
Вот этот стек:

  • php 7.2
  • PHP-FPM
  • докер
  • Nginx
  • RabbitMQ / Redis / дБ / и т.д.

В локальной среде нет проблем разделить тома как с сервисом, так и с nginx, но в производстве это плохой подход.
Когда я пытаюсь создать образ с php-fpm и nginx внутри, php-fpm всегда вылетает. Вот ошибки:

service_1_5631b886cf08 | [10-Dec-2018 21:48:42] NOTICE: [pool www]
child 22 started
service_1_5631b886cf08 | [10-Dec-2018 21:48:42] WARNING: [pool www]
child 21 exited on signal 11 (SIGSEGV - core dumped) after 26.338965
seconds from start
service_1_5631b886cf08 | [10-Dec-2018 21:48:42] NOTICE: [pool www]
child 23 started

Вот Dockerfile:

FROM php:7.2-fpm-stretch

ENV PHPREDIS_VERSION 4.1.1
ENV AMQP_VERSION 1.9.3

# Mcrypt
#RUN apt-get install -y libmcrypt-dev && docker-php-ext-install -j$(nproc) mcrypt

# GD
RUN apt-get update \
&& apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng-dev
RUN docker-php-ext-configure gd  \
--with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
&& docker-php-ext-install -j$(nproc) gd

# PDO
RUN docker-php-ext-install -j$(nproc) pdo && \
&& docker-php-ext-install -j$(nproc) pdo_mysql

# Postgres PDO
RUN apt-get install -y libpq-dev \
&& docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql \
&& docker-php-ext-install pdo_pgsql

# Redis
RUN mkdir -p /usr/src/php/ext/redis \
&& curl -L https://github.com/phpredis/phpredis/archive/$PHPREDIS_VERSION.tar.gz | tar xvz -C /usr/src/php/ext/redis --strip 1 \
&& echo 'redis' >> /usr/src/php-available-exts \
&& docker-php-ext-install redis

# INTL
RUN apt-get install -y zlib1g-dev libicu-dev g++ \
&& docker-php-ext-configure intl \
&& docker-php-ext-install intl

# OPCACHE
RUN docker-php-ext-install -j$(nproc) opcache

# APCu
RUN pecl install apcu && docker-php-ext-enable apcu

# zip
RUN docker-php-ext-install -j$(nproc) zip

# AMQP
RUN apt-get install -y librabbitmq-dev \
&& pecl install amqp-$AMQP_VERSION \
&& docker-php-ext-enable amqp

# Nginx
RUN apt-get update \
&& apt-get install -y nginx \
&& chown -R www-data:www-data /var/lib/nginx

# supervisor
RUN apt install -y supervisor \
&& mkdir -p /var/log/supervisor \
&& rm -rf /var/lib/apt/lists/*

# composer
RUN curl -sL https://getcomposer.org/installer | php -- --install-dir /usr/bin --filename composer

WORKDIR /var/www/service/service_1

ADD . /var/www/service/service_1

RUN mv nginx.conf.tmpl /etc/nginx/nginx.conf \
&& mv supervisord.conf /etc/supervisor/conf.d/supervisord.conf

RUN composer install --no-plugins --no-scripts

# php-fpm
EXPOSE 9000

# nginx
EXPOSE 8180

CMD ["/usr/bin/supervisord"]

Вот конфиг nginx для сервиса:

upstream service {
server localhost:9000;
}

server {
listen 8180;
server_name localhost;
root /var/www/services/service_1/public;

location / {
# try to serve file directly, fallback to index.php
try_files $uri /index.php$is_args$args;
}

location ~ ^/index\.php(/|$) {
fastcgi_pass service;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
internal;
}

# return 404 for all other php files not matching the front controller
# this prevents access to other php files you don't want to be accessible.
location ~ \.php$ {
return 404;
}

#    error_log /var/log/nginx/project_error.log;
#    access_log /var/log/nginx/project_access.log;
}

И конфиг супервизор:

[supervisord]
nodaemon = true
logfile = /dev/null
logfile_maxbytes = 0

[program:php-fpm]
command = /usr/local/sbin/php-fpm
stdout_logfile = /dev/stdout
stdout_logfile_maxbytes = 0
stderr_logfile = /dev/stderr
stderr_logfile_maxbytes = 0

[program:nginx]
command = /usr/sbin/nginx -g "daemon off;"stdout_logfile = /dev/stdout
stdout_logfile_maxbytes = 0
stderr_logfile = /dev/stderr
stderr_logfile_maxbytes = 0

Что я должен делать? Основная цель, я не хочу использовать том с кодом для контейнеров nginx и php-fpm, поэтому я пытаюсь заставить их работать вместе

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector