【发布时间】:2019-05-02 17:11:33
【问题描述】:
我在 laravel 5.2 中有一个应用程序可以连接到我在 mysql 中的 local 数据库,没有问题。但是,当我将我的应用程序放入 docker 容器中时,无法连接到我的数据库并出现此错误:
SQLSTATE[HY000] [2002] No such file or directory
如果我将 .env 文件中的 DB_HOST 更改为 127.0.0.1 而不是 localhost,那么我得到了另一个:
SQLSTATE[HY000] [2002] Connection refused
我读到这个问题可能是 php.ini 中的套接字路径
$ ls -l /var/run/mysqld/mysqld.sock
$ srwxrwxrwx 1 mysql mysql 0 nov 27 08:31 /var/run/mysqld/mysqld.sock
所以,我只包括在 pdo 的情况下:
; Default socket name for local MySQL connects. If empty, uses the built-in
; MySQL defaults.
; http://php.net/pdo_mysql.default-socket
pdo_mysql.default_socket=/var/run/mysqld/mysqld.sock
我的 .env 的一部分
DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=test
DB_USERNAME=developer
DB_PASSWORD=123456
我的数据库.php
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
'engine' => null,
],
我使用docker compose来挂载容器,因为我打算以后创建其他微服务:
version: "3.3"
services:
api_test:
build: .
ports:
- "8181:8181"
env_file:
- ./.env
environment:
- PORT:8181
我的 Dockerfile:
FROM php:7.1.5-apache
RUN apt-get update -y && apt-get install -y openssl zip unzip git
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN docker-php-ext-install pdo pdo_mysql mbstring
WORKDIR /api_test
COPY . /api_test
RUN composer install
RUN a2enmod rewrite
CMD php artisan serve --host=0.0.0.0 --port=8181
EXPOSE 8181
我用:
Debian 9.6,内核 4.9.0-8-amd64
Apache/2.4.25
PHP 7.0.30-0+deb9u1
MariaDB 10.1.37 数据库服务器
有什么想法吗?
【问题讨论】:
-
如果我理解正确,应该包含 Docker,您不应该尝试从您的主机访问套接字或任何文件。
-
我试过了,以防万一。但它没有用。