我正在配置在我的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也返回权限错误),所以我想知道是否有人对解决此特定权限问题有任何建议/提示。到目前为止,我一直无法找到任何问题/后续步骤,这些问题/步骤似乎仍与我的配置类似(因为在各种情况下似乎抛出了此权限错误,而不仅限于纯粹的权限问题),但经过几次我为此感到头疼的日子,我想这里可能有两个主要问题:
所以我想知道是否有人有解决这些问题的技巧。如果遗漏任何东西,我深表歉意。我是Docker的新手,也是devops / sysadmin的新手。