连接被拒绝 Docker、Laravel 和 MariaDB

问题描述 投票:0回答:1

我正在使用以下技术部署应用程序:(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
            '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'),
                ]) : [],
            ],
mysql laravel docker phpmyadmin mariadb
1个回答
0
投票

您正在使用端口“3307”(环境变量

DB_PORT
的值)进行连接,但您应该连接到端口“3306”,因为这是 MySQL/MariaDB 正在容器内侦听的端口。

在您的容器之外,该服务确实由您的端口 3307 暴露

# docker-compose.yaml
services:
  database:
    ports:
      - "${DB_PORT}:3306"

我对您的配置的建议:

# .env
DB_PORT=3306
EXPOSE_DB_PORT=3307
# docker-compose.yaml
services:
  database:
    ports:
      - "${EXPOSE_DB_PORT}:3306"    

和你的

database.php
原样

© www.soinside.com 2019 - 2024. All rights reserved.