连接nginx/php/mysql的Docker问题

连接nginx/php/mysql的Docker问题,php,mysql,docker,nginx,Php,Mysql,Docker,Nginx,我正在尝试为本地环境的一些PHP项目设置一个docker。我已经创建了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/ngi

我正在尝试为本地环境的一些PHP项目设置一个docker。我已经创建了
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虚拟主机(我从登台服务器获取了这个虚拟主机配置,可能还需要一些更改?)

所以问题是我得到了错误
未捕获的PDO异常:当我试图从浏览器访问站点时,在
中找不到驱动程序,但是当我从
worksapce
php
容器运行迁移时,所有这些都正常工作

我假设由于某种原因,
nginx
容器没有链接到
php
容器,并尝试在
nginx
容器中查找pdo驱动程序,而不是在
php
中查找它?但这听起来也不正确,因为它开始处理php脚本并仅在pdo上堆叠,因此它连接到
php
容器,所以我不确定在哪里查找问题

以前我为许多项目做过docker设置,但它们是用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:7.1-fpm-alpine
标签维护者=“Vincent Composieux”
运行设置-ex\
&&apk—无缓存添加\
postgresql开发
运行apk add--update\
php7普通\
php7 fpm\
php7 apcu\
php7型\
php7卷曲\
php7 dom\
php7-gd\
php7-iconv\
php7 json\
php7国际\
php7 mcrypt\
php7 mbstring\
php7操作缓存\
php7 openssl\
php7-pdo\
php7-pdo_sqlite\
PHP7XML\
php7 xmlwriter\
php7-zlib\
php7药物\
php7标记器\
php7会议\
php7 simplexml\
php7-xdebug\
php7 bcmath\
php7国际\
php文件信息\
php7 redis\
php gd\
制造\
卷曲\
纳米级\
g++\
重症监护病房发展\
libxslt\
libxslt开发
运行docker php ext配置pdo_mysql&&docker php ext安装mysqli pdo_mysql&&docker php ext启用pdo_mysql
运行docker php ext安装bcmath
运行docker php ext配置intl&&docker php ext安装intl
运行docker php ext安装xsl
运行rm-rf/var/cache/apk/*&&rm-rf/tmp/*&&\
卷曲——不安全https://getcomposer.org/composer.phar -o/usr/bin/composer&&chmod+x/usr/bin/composer
添加php.ini/etc/php7/php fpm.d/
添加php.ini/etc/php7/cli/conf.d/
添加php.ini/etc/php7/cli/conf.d/
添加xdebug.ini/etc/php7/conf.d/
添加www.conf/etc/php7/php fpm.d/
运行sed-i“s | memory | u limit=128M | memory | u limit=512M | g”/etc/php7/php.ini
运行sed-i“s|upload|max|u file|u size=2M|upload|u max|u file|u size=1024M|g”/etc/php7/php.ini
运行sed-i“s|post|u max|u size=8M | post|u max|u size=1024M|g”/etc/php7/php.ini
运行sed-i“s|max|u execution_time=30 | max|u execution_time=600 | g”/etc/php7/php.ini
CMD[“php-fpm7”,“-F”]
WORKDIR/var/www/vhosts/project
暴露9000

另外,
php-m
在启用的扩展列表中显示
pdo_-mysql
我做到了,所以如果在docker文件中我只有
运行docker php ext configure pdo_-mysql和&docker php ext install mysqli pdo_-mysql和&docker php ext enable pdo_-mysql
它在CLI中工作,如果我只有
运行apk add--update php7-pdo_mysql
它适用于fpm,但不适用于cli,那么我添加了两者,它适用于cli和fpm。但这很奇怪,因为我使用的是boiler plait docker confids,我已经使用过很多次了,第一次遇到了这个问题……

或者问题是
php fpm
没有看到pdo扩展,但cli确实看到了?正如我在原始问题中所写的那样。从CLI而不是从fpm工作,并且数据库迁移脚本和
index.php
使用相同的引导逻辑,我添加了这样一个调试
var_转储(扩展_-loaded('pdo_-mysql');死亡
并在CLI中返回
true
,但从浏览器返回
false
。因此看起来fpm的扩展没有启用。同样,我发现CLI(
php-I|grep php.ini
)使用
php.ini
文件,来自
/usr/local/etc/php/php.ini
,但fpm(
var_dump(phpinfo());die;
)来自
/etc/php7/php.ini
,可能就是这种情况
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