【问题标题】:Laravel - Can't establish a second Database connectionLaravel - 无法建立第二个数据库连接
【发布时间】:2022-01-03 15:29:14
【问题描述】:

我有一个Laravel 8 项目。 Laravel 在 sqlite 上运行,我想将旧的 mariaDB Wordpress 数据库中的数据导入 sqlite。旧的 wordpress 数据库在 docker 容器 中运行。而且我还可以使用 MySQL Workbench 访问数据库。

但不幸的是,我无法创建与 Docker 数据库的连接。我得到以下Illuminate\Database\QueryException

SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known (SQL: select * from wp_posts where post_type = news)

为什么我在这里遗漏了什么?

这是我的相关设置:

docker-compose.yml

docker-compose.yml
version: "3.7"
services:
# ...
  #Mysl Service
  mysql:
    image: mariadb:10.5
    container_name: laravel-mysql
    volumes:
      - db_data:/var/lib/mysql
      - ./logs/mysql:/var/log/mysql
      - ./dumps/:/home/dumps
    environment:
      - MYSQL_ROOT_PASSWORD=password
      - MYSQL_DATABASE=laravel
      - MYSQL_USER=laravel
      - MYSQL_PASSWORD=password
    ports:
      - 3307:3306
    networks:
      - mynetwork
# ...
volumes:
  db_data:

.env

DB_CONNECTION=sqlite

DB_CONNECTION_WP=mysql
DB_HOST_WP=mysql
DB_PORT_WP=3306
DB_DATABASE_WP="wordpress"
DB_USERNAME_WP=root
DB_PASSWORD_WP=password

database.php

'mysql_wp' => [
    'driver' => 'mysql',
    'url' => env('DATABASE_URL_WP'),
    'host' => env('DB_HOST_WP', '127.0.0.1'),
    'port' => env('DB_PORT_WP', '3307'),
    'database' => env('DB_DATABASE_WP', 'wordpress'),
    'username' => env('DB_USERNAME_WP', 'root'),
    'password' => env('DB_PASSWORD_WP', 'password'),
    'unix_socket' => env('DB_SOCKET_WP', ''),
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_unicode_ci',
],      

service/imports/wpNewsImport.php

$data = DB::connection('mysql_wp')
  ->table('wp_posts')
  ->where("post_type", "news")
  ->get();

在此先感谢您,顺便说一句。新年快乐!

【问题讨论】:

    标签: laravel docker-compose


    【解决方案1】:

    看起来您的 DB_HOST_WP=mysql 设置有误。应该有一个有效的数据库主机地址或 ip。如果您可以使用 MySQL Workbench 访问数据库,而不仅仅是从中复制主机设置。

    【讨论】:

    • 感谢您的回答。我已经尝试过了,但它没有用。顺便说一句,在另一个项目中,我的做法与 container_name = HOST 名称完全相同。
    • 我发现了问题。 (stackoverflow.com/a/70577816/14807111) 。这意味着如果我没有忘记进入容器,您的答案将是正确的。来自我的 +1
    【解决方案2】:

    我发现了问题。我太傻了。您必须在应用程序容器内才能进行数据库交互。因为 app 容器和数据库容器在同一个 docker 网络中。我在外面。即所有设置都是正确的。我只需要通过 bash 登录到数据库容器。

    docker exec -it laravel-app bash

    然后就可以了。

    【讨论】:

      猜你喜欢
      • 2016-03-11
      • 1970-01-01
      • 2011-11-25
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 2016-10-05
      • 1970-01-01
      • 2015-02-15
      相关资源
      最近更新 更多