Docker部署Laravel+MariaDB时数据库连接拒绝问题求助
Laravel应用无法访问Docker编排的MariaDB数据库
我采用Laravel + MariaDB + phpMyAdmin技术栈部署应用,通过Dockerfile构建应用镜像,使用docker-compose将所有服务编排到同一网络中,通过.env文件定义环境变量配置端口与密码。
目前遇到的问题:应用无法访问数据库,但查看所有容器日志均未发现错误;远程连接数据库可成功,容器间ping连通,甚至在应用容器内部直接连接数据库也能成功。
以下是相关配置文件:
.env
DB_CONNECTION=mysql DB_HOST=database DB_PORT=3307 DB_DATABASE=mysql DB_USERNAME=root DB_PASSWORD= DB_ADMIN_PORT=8086
docker-compose.yml
version: '3' services: app: build: context: . target: ${APP_ENV} dockerfile: Dockerfile container_name: app ports: - "${APP_PORT}:80" volumes: - /user/dir:/var/www/html env_file: - .env networks: - name_network depends_on: - database database: image: mariadb:10.5.6 container_name: appdb ports: - "${DB_PORT}:3306" environment: MYSQL_DATABASE: mysql MYSQL_USER: root MYSQL_ALLOW_EMPTY_PASSWORD: 1 volumes: - db_data:/var/lib/mysql env_file: - .env networks: - name_network phpmyadmin: image: phpmyadmin/phpmyadmin container_name: phpmyadmin ports: - "${DB_ADMIN_PORT}:80" environment: PMA_HOST: database PMA_PORT: ${DB_PORT} env_file: - .env networks: - name_network networks: networks: name_network: driver: bridge volumes: db_data:
Dockerfile
FROM php:8.2.4-apache AS production ENV COMPOSER_ALLOW_SUPERUSER=1 RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer RUN apt-get update && apt-get install -y \ libpng-dev \ libjpeg-dev \ libfreetype6-dev \ zip \ unzip RUN a2enmod rewrite RUN docker-php-ext-configure gd --with-freetype --with-jpeg \ && docker-php-ext-install -j$(nproc) gd pdo pdo_mysql COPY . /var/www/html RUN chown -R www-data:www-data storage RUN chown -R $USER:www-data /var/www/html/storage/ RUN composer clear-cache RUN composer install --no-dev --ignore-platform-req=ext-zip --no-scripts #RUN php artisan config:cache EXPOSE 8085 CMD ["apache2-foreground"]
database.php(Laravel配置文件片段)
'mysql' => [ 'driver' => 'mysql', 'url' => env('DATABASE_URL'), 'host' => env('DB_HOST', 'database'), 'port' => env('DB_PORT', '3306'), 'database' => env('DB_DATABASE', 'mysql'), 'username' => env('DB_USERNAME', 'root'), 'password' => env('DB_PASSWORD', ''), 'unix_socket' => env('DB_SOCKET', ''), 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'prefix_indexes' => true, 'strict' => true, 'engine' => null, 'options' => extension_loaded('pdo_mysql') ? array_filter([ PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), ]) : [], ],
内容的提问来源于stack exchange,提问作者Jonathan Rendón
相关产品推荐
相关产品推荐

