Проблема с докером для подключения nginx / php / mysql - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь настроить докер для некоторых проектов PHP для локальной среды. Я создал docker-compose файл:

############
## This is the LOCAL docker-compose. local is not in the file to make it default,
## easy for development.
############
version: '3.5'
services:
  nginx:
    build: ./docker/images/nginx
    image: project/nginx:latest
    ports:
      - "80:80"
    expose:
      - "80"
    volumes:
      - project_volume:/var/www/vhosts/abboom
    networks:
      project:
        aliases:
          - project.local.net
    environment:
       - VIRTUAL_HOST=project.local.net
  php:
    build: ./docker/images/php
    image: project/php:latest
    ports:
      - "7778:7778"
    expose:
      - "9000"
    volumes:
      - project_volume:/var/www/vhosts/project
    networks:
      - project
  workspace:
    build: ./docker/images/workspace
    image: project/workspace:latest
    volumes:
      - project_volume:/var/www/vhosts/project
    working_dir: /var/www/vhosts/project
    networks:
      - project
  redis_disk:
    build: ./docker/images/redis_disk
    image: project/redis:latest
    ports:
      - "6379:6379"
    volumes:
      - redis_data:/data
    networks:
      - project
  mysql:
    image: project/mysql:latest
    build: ./docker/images/mysql
    environment:
      MYSQL_ROOT_PASSWORD: secret
    volumes:
      - mysqldata:/var/lib/mysql
    networks:
      - project
    ports:
      - "33066:3306"
networks:
  project:
    name: project

volumes:
  mysqldata:
    driver: local
  redis_data:
    driver: local
  project_volume:
    driver: local
    driver_opts:
      type: nfs
      device: "$PWD/project"
      o: bind

также, вероятно, мне нужно поделиться виртуальным хостом nginx для проекта (я взял эту конфигурацию виртуального хоста с промежуточного сервера, возможно, это потребует дополнительных изменений?)

server {
    listen       80;
    server_name project.local.net;
    root         /var/www/vhosts/project/public;

    index index.php;

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

    # redirect server error pages to the static page /50x.html
    #
    error_page   400 404 500 502 503 504  /500.html;
    location = /500.html {
    }

    location ~ /(assets/|content/|images/|stylesheets/|javascripts/|vendor/|fonts/|favicon.ico) {
    root          /var/www/vhosts/project/public;
    }

    location / {
            root           /var/www/vhosts/project/public;
            try_files $uri $uri/ /index.php?$args;
            fastcgi_pass   php:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME   $document_root$fastcgi_script_name;
            include        fastcgi_params;

    }
}

Итак, проблема в том, что я получаю ошибку Uncaught PDOException: could not find a driver in, когда пытаюсь получить доступ к сайту из браузера, но когда я, например, запускаю миграцию с worksapce илиКонтейнер php все работает правильно.

Я предполагаю, что по какой-то причине контейнер nginx не связан с контейнером php и вместо этого пытается найти драйвер pdo внутри контейнера nginxсмотреть это в PHP? Но это также звучит как не правильно, так как он начинает обрабатывать php-скрипты и укладывается только на pdo, поэтому он подключен к контейнеру php, поэтому я не уверен, где искать проблему

РанееЯ выполнил настройку докера для многих проектов, но они были написаны с использованием PHP-фреймворков, таких как Laravel, Symfony, но этот проект написан от руки и может потребовать некоторых дополнительных изменений?

Обновлено

Вот файл php Docker:

FROM php:7.1-fpm-alpine

LABEL maintainer="Vincent Composieux <vincent.composieux@gmail.com>"

RUN set -ex \
  && apk --no-cache add \
    postgresql-dev
RUN apk add --update \
    php7-common \
    php7-fpm \
    php7-apcu \
    php7-ctype \
    php7-curl \
    php7-dom \
    php7-gd \
    php7-iconv \
    php7-json \
    php7-intl \
    php7-mcrypt \
    php7-mbstring \
    php7-opcache \
    php7-openssl \
    php7-pdo \
    php7-pdo_sqlite \
    php7-xml \
    php7-xmlwriter \
    php7-zlib \
    php7-phar \
    php7-tokenizer \
    php7-session \
    php7-simplexml \
    php7-xdebug \
    php7-bcmath\
    php7-intl \
    php-fileinfo \
    php7-redis \
    php-gd \
    make \
    curl \
    nano \
    g++ \
    icu-dev \
    libxslt \
    libxslt-dev



RUN docker-php-ext-configure pdo_mysql  && docker-php-ext-install mysqli pdo_mysql && docker-php-ext-enable pdo_mysql
RUN docker-php-ext-install bcmath
RUN docker-php-ext-configure intl  && docker-php-ext-install intl
RUN docker-php-ext-install xsl

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 php.ini /etc/php7/php-fpm.d/
ADD php.ini /etc/php7/cli/conf.d/
ADD php.ini /etc/php7/cli/conf.d/
ADD xdebug.ini  /etc/php7/conf.d/

ADD www.conf /etc/php7/php-fpm.d/


RUN   sed -i "s|memory_limit = 128M|memory_limit = 512M |g" /etc/php7/php.ini
RUN   sed -i "s|upload_max_file_size = 2M|upload_max_file_size = 1024M |g" /etc/php7/php.ini
RUN   sed -i "s|post_max_size = 8M|post_max_size = 1024M |g" /etc/php7/php.ini
RUN   sed -i "s|max_execution_time = 30|max_execution_time = 600 |g" /etc/php7/php.ini

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

WORKDIR /var/www/vhosts/project
EXPOSE 9000

также php -m, показывающий pdo_mysql в списке включенных расширений

1 Ответ

0 голосов
/ 07 ноября 2019

Я сделал это, поэтому, если в файле Docker у меня есть только RUN docker-php-ext-configure pdo_mysql && docker-php-ext-install mysqli pdo_mysql && docker-php-ext-enable pdo_mysql, это работает для CLI, если у меня есть только RUN apk add --update php7-pdo_mysql, это работает для fpm, но не для cli, поэтому я добавил оба, и это работает для cli иFPM. Но это странно, так как я использую конфетер Docker, который я использовал уже много раз, и впервые столкнулся с этой проблемой ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...