Redis + Docker:PDOException:找不到驱动程序

时间:2018-05-28 11:04:26

标签: laravel docker redis docker-compose laravel-horizon

我是使用Redis的新手。我在Docker中运行Laravel,MariaDB和Redis。我似乎无法让redis正常工作。我在Laravel Horizo​​n中收到以下错误:

  

PDOException:在/var/www/api/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php:46中找不到驱动程序

我的猜测是代码正在redis容器中执行,无法访问PHP容器。

这是我的docker-compose.yml:

# Web server
nginx:
    image: nginx:latest
    restart: always
    links:
    - socketio-server
    ports:
    - "3000:3001"
    - "8081:80"
    volumes:
    - ./api:/var/www/api
    - ./docker/nginx/conf.d/:/etc/nginx/conf.d
    - ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf
    links:
    - php

# PHP
php:
    build: ./docker/php-fpm
    volumes:
    - ./api:/var/www/api
    links:
    - mariadb

# Redis
redis:
    image: redis:latest
    depends_on:
    - php
    expose:
    - "6379"

# Database
mariadb:
    image: mariadb:latest
    restart: always
    ports:
    - "3306:3306"
    volumes:
    - ./database/mariadb/:/var/lib/mysql

# PHP workers
php-worker:
    build:
    context: ./docker/php-worker
    args:
        - PHP_VERSION=7.2
        - INSTALL_PGSQL=false
    volumes:
    - ./:/var/www
    - ./docker/php-worker/supervisor.d:/etc/supervisor.d
    extra_hosts:
    - "dockerhost:10.0.75.1"
    links:
    - redis

任何想法?

2 个答案:

答案 0 :(得分:2)

您认为容器无法相互访问的假设是正确的。

您的PHP容器执行PHP代码,因此它必须能够访问redis容器和mariadb容器才能使用它们。您可以通过将它们添加到links数组来完成此操作。我看到你已经为mariadb做了这个,但是你也应该添加redis。

# PHP
php:
    build: ./docker/php-fpm
    volumes:
    - ./api:/var/www/api
    links:
    - mariadb
    - redis

通过将redis添加到links数组,您可以使用主机名redis在PHP容器中访问它。

答案 1 :(得分:0)

我原来是'php-worker'容器中的一个问题。我没有在这里安装pdo_mysql。现在一切正常!