laravel作为docker-compose服务-[QueryException]找不到驱动程序

时间:2019-01-31 14:56:48

标签: laravel docker docker-compose mariadb dockerfile

我使用以下dockerfile为laravel项目创建一个容器:

FROM composer:1.8

RUN apk add --no-cache libpng libpng-dev libjpeg-turbo-dev libwebp-dev zlib-dev libxpm-dev
RUN docker-php-ext-install pdo mbstring gd
RUN docker-php-ext-enable gd

WORKDIR /app
COPY . /app
RUN composer install

CMD php artisan serve --host=0.0.0.0 --port=8181
EXPOSE 8181

然后我尝试将其用作docker-compose.yml文件中的服务:

version: '3'
services:
  webservice:
    image: private.repo.com/my_user/webservice
    ports:
      - '80:8181'
    depends_on:
      - mariadb
  mariadb:
    image: mariadb
    volumes:
      - './db:/var/lib/mysql'
    environment:
      - MYSQL_ROOT_PASSWORD=some_password
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    depends_on:
      - mariadb
    ports:
      - '443:80'
    environment:
      - PMA_HOST=mariadb
      - PMA_PORT=3306

现在我要调用API时遇到错误500。 (错误是[QueryException]找不到驱动程序)

我搜索了一下,发现所有的事情通常都是因为.env文件出了问题

这是我在laravel项目中的.env文件

DB_CONNECTION=mysql
DB_HOST=mariadb
DB_PORT=3306
DB_DATABASE=my_db_name
DB_USERNAME=my_db_user
DB_PASSWORD=my_db_pass

DB_HOST与我的docker-compose.yml文件相同。

我还尝试在我的3306服务中导出端口mariadb,但是它也不起作用

我哪里出错了,请帮助

-----------更新-----------

我还检查了mariadb服务的IP,并将其放在我的服务容器中(它们都在工作,没有关闭它们),但是问题仍然存在。

1 个答案:

答案 0 :(得分:0)

实际上非常简单。

我也必须安装pdo_mysql

现在我的docker文件是这样的:

FROM composer:1.8

RUN apk add --no-cache libpng libpng-dev libjpeg-turbo-dev libwebp-dev zlib-dev libxpm-dev
RUN docker-php-ext-install pdo mbstring gd pdo_mysql # this line is changed
RUN docker-php-ext-enable gd

WORKDIR /app
COPY . /app
RUN composer install

CMD php artisan serve --host=0.0.0.0 --port=8181
EXPOSE 8181

我在这里找到了解决方法:https://github.com/docker-library/php/issues/62#issuecomment-70306737