SQLSTATE [HY000] [2002]试图停靠Laravel应用程序时拒绝连接

发布于 2025-02-13 21:09:32 字数 3813 浏览 1 评论 0 原文

我能够使用 phpMyAdmin 使用 使用使用用户:admin 密码:root URL:127.0.0.1:3310 ,我能够通过 127.0.0.1:8008加载网站,但是当我尝试登录或与之互动时数据库我在下面收到错误:

sqlstate [hy000] [2002]连接拒绝 选择 *来自用户其中 emaim = 限制1

,我也尝试从 app docker容器内部进行迁移,但下面也

root@58a709f18668:/var/www/html# php artisan migrate

   Illuminate\Database\QueryException 

  SQLSTATE[HY000] [2002] Connection refused (SQL: select * from information_schema.tables where table_schema = laravelvueblog_db and table_name = migrations and table_type = 'BASE TABLE')

下方

DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3309
DB_DATABASE=laravelvueblog_db
DB_USERNAME=admin
DB_PASSWORD=root

失败了。 /strong>

<VirtualHost *:8008>
    DocumentRoot /var/www/html/public

    <Directory "/var/www/html/public">
        AllowOverride all
        Require all granted
    </Directory>

    #ErrorLog ${APACHE_LOG_DIR}/error.log
    #CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

下面的文件是我的 docker文件

FROM php:8-apache

USER root
RUN apt-get update -y && apt-get install -y openssl curl zip unzip git nano
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
RUN docker-php-ext-install mysqli pdo pdo_mysql opcache
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

WORKDIR /app
COPY . /app
COPY vhost.conf /etc/apache2/sites-available/000-default.conf

RUN chown -R www-data:www-data /app && a2enmod rewrite
RUN rm -rf /var/www/html && ln -s /app /var/www/html
RUN composer install
RUN php artisan optimize:clear

CMD php artisan serve --host=0.0.0.0 --port=8000
EXPOSE 8000

下面是我的 docker-compose.yaml文件

version: '3.8'
services: 
    db:
        image: mariadb:latest
        container_name: db
        ports:
            - 3309:3306
        environment:
            MYSQL_DATABASE: laravelvueblog_db
            MYSQL_ROOT_PASSWORD: root
            MYSQL_PASSWORD: root
            MYSQL_USER: admin            
        volumes:
            - mysql_file:/docker-entrypoint-initdb.d
        networks:
            - appnetwork
    main:
        build: 
            context: .
            dockerfile: Dockerfile
        volumes:
            - .:/app
        ports:
            - 8008:8000
        environment:
            # MYSQL_DATABASE: laravelvueblog_db
            # MYSQL_ROOT_PASSWORD: root
            # MYSQL_PASSWORD: root
            # MYSQL_USER: admin
            DB_HOST: db
            DB_USER: admin
            DB_PASSWORD: root
            DB_NAME: laravelvueblog_db
            WAIT_HOSTS: db:3306

        depends_on:
            - db
        links:
            - db
        networks:
            - appnetwork

    phpmyadmin:
        image: phpmyadmin/phpmyadmin
        ports:
            - 3310:80
         links:
            - mysql
        environment:
            PMA_HOSTS: db
            PMA_PORT: 3306
        depends_on:
            - db
        networks:
            - appnetwork
 volumes:
     mysql_file:
         driver: local
 networks:
     appnetwork:
         driver: bridge

I was able to access the mysql database from phpmyadmin using user: admin and password: root and the url: 127.0.0.1:3310 and I was able to load the website on 127.0.0.1:8008 but when i try to login or interact with the database i get the error below:

SQLSTATE[HY000] [2002] Connection refused
select * from users where email = [email protected] limit 1

and I also try to do a migration from within the app docker container but failed as well

root@58a709f18668:/var/www/html# php artisan migrate

   Illuminate\Database\QueryException 

  SQLSTATE[HY000] [2002] Connection refused (SQL: select * from information_schema.tables where table_schema = laravelvueblog_db and table_name = migrations and table_type = 'BASE TABLE')

below is my .env file

DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3309
DB_DATABASE=laravelvueblog_db
DB_USERNAME=admin
DB_PASSWORD=root

below is my vhost.conf file

<VirtualHost *:8008>
    DocumentRoot /var/www/html/public

    <Directory "/var/www/html/public">
        AllowOverride all
        Require all granted
    </Directory>

    #ErrorLog ${APACHE_LOG_DIR}/error.log
    #CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

below is my Docker file

FROM php:8-apache

USER root
RUN apt-get update -y && apt-get install -y openssl curl zip unzip git nano
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
RUN docker-php-ext-install mysqli pdo pdo_mysql opcache
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

WORKDIR /app
COPY . /app
COPY vhost.conf /etc/apache2/sites-available/000-default.conf

RUN chown -R www-data:www-data /app && a2enmod rewrite
RUN rm -rf /var/www/html && ln -s /app /var/www/html
RUN composer install
RUN php artisan optimize:clear

CMD php artisan serve --host=0.0.0.0 --port=8000
EXPOSE 8000

below is my docker-compose.yaml file

version: '3.8'
services: 
    db:
        image: mariadb:latest
        container_name: db
        ports:
            - 3309:3306
        environment:
            MYSQL_DATABASE: laravelvueblog_db
            MYSQL_ROOT_PASSWORD: root
            MYSQL_PASSWORD: root
            MYSQL_USER: admin            
        volumes:
            - mysql_file:/docker-entrypoint-initdb.d
        networks:
            - appnetwork
    main:
        build: 
            context: .
            dockerfile: Dockerfile
        volumes:
            - .:/app
        ports:
            - 8008:8000
        environment:
            # MYSQL_DATABASE: laravelvueblog_db
            # MYSQL_ROOT_PASSWORD: root
            # MYSQL_PASSWORD: root
            # MYSQL_USER: admin
            DB_HOST: db
            DB_USER: admin
            DB_PASSWORD: root
            DB_NAME: laravelvueblog_db
            WAIT_HOSTS: db:3306

        depends_on:
            - db
        links:
            - db
        networks:
            - appnetwork

    phpmyadmin:
        image: phpmyadmin/phpmyadmin
        ports:
            - 3310:80
         links:
            - mysql
        environment:
            PMA_HOSTS: db
            PMA_PORT: 3306
        depends_on:
            - db
        networks:
            - appnetwork
 volumes:
     mysql_file:
         driver: local
 networks:
     appnetwork:
         driver: bridge

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

秉烛思 2025-02-20 21:09:33

经过几次尝试,我发现了这个问题,因为所有服务都在同一网络上( appNework ),

我在下面的laravel .env文件中使用了内部端口

DB_PORT=3306

所以

After several attempt I found the problem, since all the services are on the same network (appnework)

I used the internal port in my laravel .env file like below

DB_PORT=3306

And now it works fine

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文