繁体   English   中英

Docker 连接nginx/php/mysql的问题

[英]Docker problem to connect nginx/php/mysql

我正在尝试为本地环境的一些 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 虚拟主机(我从临时服务器获取了这个虚拟主机配置,也许它需要更多更改?)

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都在工作正确。

I'm assuming that for some reason nginx container is not linked with php container and trying to find the pdo driver inside of the nginx container instead of looking it in the PHP ? 但这听起来也不正确,因为它开始处理 php 脚本并仅在 pdo 上堆叠,因此它连接到php容器,所以我不确定在哪里寻找问题

Previously I have made docker setup for many projects but they was written with PHP frameworks like Laravel , Symfony , but this one is a handwritten project and maybe it requires some additional changes?

更新

这是一个 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

我做到了,所以如果在 docker 文件中我只有RUN apk add --update php7-pdo_mysql 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 我已经使用过很多次了,而且第一次遇到这个问题......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM