连接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或{{ 1}}容器全部正常工作。

我假设出于某种原因worksapce容器未与php容器链接,并尝试在nginx容器内查找pdo驱动程序,而不是在{ {1}}?但这听起来似乎不正确,因为它开始处理php脚本并仅在pdo上进行堆栈,因此它连接到php容器,因此我不确定在哪里查找问题

之前,我已经为许多项目进行了docker设置,但是它们是使用nginxPHP之类的PHP框架编写的,但这是一个手写项目,也许还需要进行一些其他更改?

已更新

这是一个php Docker文件:

php

Laravel在已启用的扩展程序列表中显示Symfony

bohaooffice 回答:连接nginx / php / 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 confids,并且第一次遇到该问题...

本文链接:https://www.f2er.com/3147645.html

大家都在问