Проблемы при попытке запустить несколько контейнеров php-fpm для разных сред для одного и того же приложения за прокси-сервером traefik - PullRequest
0 голосов
/ 11 июня 2019

Я настраиваю живую и тестовую среду для веб-сайта, который я размещаю.В настоящее время я сталкиваюсь с проблемами и не могу понять, почему это происходит.Я использую MySQL, Nginx и PHP-fpm контейнер.Я хочу, чтобы обе среды имели свою собственную группу контейнеров.

Группа контейнеров A - это живая среда, а B будет ссылаться на тестовую среду.Запомните эти ссылки, поскольку они будут возвращаться в коде, представленном ниже.

Я изменил порты PHP-fpm и MySQL для группы B, чтобы они не мешали группе A. Для MySQL это работает(до этого момента) но контейнер PHP-fpm, похоже, не хочет работать.

Единственный раз, когда у меня была группа контейнеров B, функционирующая должным образом, это когда я менял свои extra_hosts в моем docker-compose для A, нотогда A перестанет работать.

docker-compose.yml для A

Same as the file below but uses port 9000:9001 for PHP

docker-compose.yml для B

version: '3.7'

networks:
  web:
    external: true
  internal:
    external: false

services:
  # MySQL container code sits here but I think there is nothing wrong 
    with that one

  php:
    build: ./.docker/php-fpm
    ports:
    - "9002:9003"
    volumes:
    - ./:/var/www/symfony:cached
    - ./logs/symfony:/var/www/symfony/var/log:cached
    links:
    - db
    restart: always
    extra_hosts:
    - "docker-host.localhost:127.0.0.1" # Changing this to test-docker-host.localhost:127.0.0.1 doesn't work either.
    networks:
    - internal
    labels:
    - traefik.enable=false

  nginx:
    build: ./.docker/nginx
    links:
    - php
    volumes:
    - ./:/var/www/symfony:cached
    - ./logs/nginx:/var/log/nginx:cached
    restart: always
    networks:
    - internal
    - web
    labels:
    - traefik.backend=Test-Website
    - traefik.frontend.rule=Host:test.website.com
    - traefik.frontend.redirect.regex=^https?://website.com/(.*)
    - traefik.frontend.redirect.replacement=https://test.website.com/$${1}
    - traefik.docker.network=web
    - traefik.port=80
    depends_on:
    - db

Nginx Dockerfile (B)

FROM alpine:3.8

RUN apk add --update nginx
RUN rm -rf /var/cache/apk/* && rm -rf /tmp/*

ADD nginx.conf /etc/nginx/
ADD symfony.conf /etc/nginx/conf.d/
RUN rm -rf /etc/nginx/conf.d/default.conf

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

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

RUN chown -R www-data.www-data /var/tmp/nginx

CMD ["nginx"]

EXPOSE 80
EXPOSE 443

PHP-fpm Dockerfile (B)

FROM alpine:3.8

RUN apk add --update \
    php7-fpm \
    php7-apcu \
    php7-ctype \
    php7-curl \
    php7-dom \
    php7-gd \
    php7-iconv \
    php7-imagick \
    php7-json \
    php7-intl \
    php7-mcrypt \
    php7-fileinfo\
    php7-mbstring \
    php7-opcache \
    php7-openssl \
    php7-pdo \
    php7-pdo_mysql \
    php7-mysqli \
    php7-xml \
    php7-zlib \
    php7-phar \
    php7-tokenizer \
    php7-session \
    php7-simplexml \
    php7-xdebug \
    php7-zip \
    make \
    curl \
    nodejs \
    yarn \
    autoconf \
    libtool \
    automake \
    build-base \
    nasm \
    pkgconfig \
    zlib-dev \
    libpng-dev \
    g++

RUN rm -rf /var/cache/apk/* && rm -rf /tmp/* && \
    curl --insecure https://getcomposer.org/composer.phar -o /usr/bin/composer && chmod +x /usr/bin/composer

ADD symfony.ini /etc/php7/conf.d/
ADD symfony.ini /etc/php7/cli/conf.d/
ADD xdebug.ini  /etc/php7/conf.d/

ADD symfony.pool.conf /etc/php7/php-fpm.d/

CMD ["php-fpm7", "-F"]

WORKDIR /var/www/symfony
EXPOSE 9003 # A exposes 9001

Symfony.pool.conf (B) Я изменил порт прослушивания fpm здесь

; A exposes :9001
listen = 0.0.0.0:9003

Яне появляется никаких ошибок, за исключением 504 тайм-аутов шлюза через определенное время.Я хочу иметь возможность запускать обе среды на одном и том же сервере, но с отдельными контейнерами в качестве своих служб.

...