连接nginx/php/mysql的Docker问题
我正在尝试为本地环境的一些PHP项目设置一个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
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