Docker套接字连接到mysql尝试:PDOException(代码:2002):SQLSTATE [HY000] [2002]权限被拒绝

时间:2020-08-28 19:09:05

标签: php mysql laravel docker mariadb

我正在配置在我的Centos 7主机服务器上运行的docker容器中配置laravel安装。 laravel容器需要访问主机系统上的数据库;由于该数据库当前正由其他许多相互关联的项目使用,因此我目前也无法将数据库移至容器中。我研究了连接到主机数据库的过程,它看起来有两个选择:TCP或直接套接字连接。看起来执行TCP路由会涉及一些更改,这可能会影响其他项目访问数据库的方式,因此我目前正在尝试套接字路由。我已经成功配置了一切,直到axios req在docker中到达服务器后端的位置。此时,所有尝试访问数据库的后端进程都将返回此错误(通过Laravel的日志路由到STDERR并从docker访问):

(PDOException(code: 2002): SQLSTATE[HY000] [2002] Permission denied at /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70)

这是我的docker-compose.yml:

version: "2.2"
services:
 projectname:
  image: php:7.4-apache
  ports:
   - "8060:80"
  tty: true
  restart: unless-stopped
  working_dir: /var/www/html
  container_name: projectname
  volumes:
   - /var/lib/mysql/mysql.sock:/var/lib/mysql/mysql.sock
  build:
   context: .
   dockerfile: projectname_dockerfile

和我的dockerfile(是的,一团糟):

FROM php:7.4-apache
USER root
WORKDIR /var/www/html
COPY composer.lock composer.json /var/www/html/
COPY override.ini /usr/local/etc/php/conf.d/
RUN apt-get update && apt-get install -y \
 unzip \
 mariadb-client
#RUN add-apt-repository ppa:ondrej/php
#RUN apt install -y php7.4-mysql
RUN docker-php-ext-install mysqli pdo_mysql && docker-php-ext-enable mysqli pdo_mysql \
 && a2enmod headers \
 && a2enmod rewrite \
 && sed -ri -e 's/^([ \t]*)(<\/VirtualHost>)/\1\tHeader set Access-Control-Allow-Origin "*"\n\1\2/g' /etc/apache2/sites-available/*.conf
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
COPY . /var/www/html
RUN /usr/local/bin/composer install
RUN chown -R www-data:www-data /var/www/html

关于版本控制,我有:

主服务器:
操作系统:Centos 7
DB:5.5.65-MariaDB服务器
码头工人:1.13.1

容器:
PHP:7.4.9
Mysql:返回错误“无法通过套接字'/var/run/mysqld/mysqld.sock'连接到本地MySQL服务器”

容器中的

phpinfo()对于PDO和mysql显示以下内容:

PDO drivers are loaded, PDO detects a MySQL client API and socket

我必须在要通过dockerfile复制到容器中的override.ini文件中手动设置pdo_mysql.default_socket。

Laravel似乎不是问题(容器中的MySQL也返回权限错误),所以我想知道是否有人对解决此特定权限问题有任何建议/提示。到目前为止,我一直无法找到任何问题/后续步骤,这些问题/步骤似乎仍与我的配置类似(因为在各种情况下似乎抛出了此权限错误,而不仅限于纯粹的权限问题),但经过几次我为此感到头疼的日子,我想这里可能有两个主要问题:

  1. pdo_mysql显示mysqlnd 7.4.9而不是我在dockerfile中安装的MariaDB客户端
  2. 访问mysql.sock似乎需要更改权限或进行其他更改

所以我想知道是否有人有解决这些问题的技巧。如果遗漏任何东西,我深表歉意。我是Docker的新手,也是devops / sysadmin的新手。

0 个答案:

没有答案
相关问题