微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Web 和 CLI mysql 不会同时连接

如何解决Web 和 CLI mysql 不会同时连接

我已经使用 Laravel Sail(基于 Docker)设置了我的 Laravel 应用程序。除了 MysqL,一切正常。 MysqL 服务器对于 Web (local.mysite.com:8080) 和 CLI(例如:PHP artisan migrate)的行为不同。

配置 (1)

如果我在 .env 文件中使用以下配置,

...
APP_DOMAIN=local.mysite.com
...
DB_CONNECTION=MysqL
DB_HOST=MysqL
DB_PORT=3306
DB_DATABASE=mydb
DB_USERNAME=root
DB_PASSWORD=root
FORWARD_DB_PORT=3307

网络有效,而不是 CLI。当我运行 PHP artisan migrate 命令时,我得到 sqlSTATE[HY000] [2002] PHP_network_getaddresses: getaddrinfo Failed: Name or service not kNown

配置(2)

如果我使用以下配置,

...
APP_DOMAIN=local.mysite.com
...
DB_CONNECTION=MysqL
DB_HOST=local.mysite.com 
DB_PORT=3307
DB_DATABASE=mydb
DB_USERNAME=root
DB_PASSWORD=root
FORWARD_DB_PORT=3307

CLI 工作正常,而不是网络。我在网络上收到 MysqLConnection Refured 错误

我一直在用不同的尝试敲我的头,没有运气......

我做错了什么?


这是我的 docker-compose.yml 供参考(顺便说一句,PHPmyadmin 工作得非常好):

# For more information: https://laravel.com/docs/sail
version: '3'
services:
    PHPmyadmin:
        depends_on:
            - MysqL
        image: PHPmyadmin/PHPmyadmin
        restart: always
        ports:
            - '8081:80'
        environment:
            PMA_HOST: MysqL
            MysqL_ROOT_PASSWORD: password
        networks:
            - sail

    laravel.test:
        build:
            context: ./vendor/laravel/sail/runtimes/8.0
            dockerfile: Dockerfile
            args:
                WWWGROUP: '${WWWGROUP}'
        image: sail-8.0/app
        extra_hosts:
            - '${APP_DOMAIN}:127.0.0.1'
        hostname: '${APP_DOMAIN}'
        domainname: '${APP_DOMAIN}'
        ports:
            - '${APP_PORT:-80}:80'
        environment:
            WWWUSER: '${WWWUSER}'
            LaraVEL_SAIL: 1
        volumes:
            - '.:/var/www/html'
        networks:
            - sail
        depends_on:
            - MysqL
    MysqL:
        image: 'MysqL:8.0'
        ports:
            - '${FORWARD_DB_PORT:-3306}:3306'
        environment:
            MysqL_ROOT_PASSWORD: '${DB_PASSWORD}'
            MysqL_DATABASE: '${DB_DATABASE}'
            MysqL_ALLOW_EMPTY_PASSWORD: 'yes'
        volumes:
            - 'sailMysqL:/var/lib/MysqL'
        networks:
            - sail
        healthcheck:
          test: ["CMD","MysqLadmin","ping","-p${DB_PASSWORD}"]
          retries: 3
          timeout: 5s
networks:
    sail:
        driver: bridge
volumes:
    sailMysqL:
        driver: local

解决方法

我意识到我的错误。

我应该使用 sail artisan migrate 而不是 php artisan migrate,正如官方 Laravel Sail documentation 中明确说明的那样。

因此正确的配置是:

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=mydb
DB_USERNAME=root
DB_PASSWORD=root
FORWARD_DB_PORT=3307

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?