【问题标题】:Connecting Database Codeigniter 4 With Custom Ports使用自定义端口连接数据库 Codeigniter 4
【发布时间】:2021-05-25 08:02:11
【问题描述】:

所以,我正在尝试从我的网络服务器容器连接到我的数据库容器。我目前在我的 PHP 框架中使用 Codeignter 4。就不同容器之间的通信而言,一切都很顺利,因为该容器位于相同的网络中。在 webserver 容器中,我尝试从数据库容器 ping 到数据库容器没有问题,所有端口都可以访问,因为我可以连接 PHPMyAdmin,它在他们自己的依偎小容器中并毫无问题地连接到我的数据库容器。

这是回溯

SYSTEMPATH/Database/BaseConnection.php : 618   —  CodeIgniter\Database\BaseConnection->initialize ()

我试图从我的控制器中进行 DD,希望覆盖任何返回视图

$db = \Config\Database::connect();
$apakek = $db->query("SELECT * FROM student_details_dummy");
dd($apakek);

这是我在 App\Database.php 中的数据库数组

public $default = [
    'DSN'      => '',
    'hostname' => '172.21.0.4',
    'username' => 'kr_rw',
    'password' => 'MrSLwwZvwC1KCRm6',
    'database' => 'kr_main',
    'DBDriver' => 'MySQLi',
    'DBPrefix' => '',
    'pConnect' => false,
    'DBDebug'  => (ENVIRONMENT !== 'development'),
    'cacheOn'  => false,
    'cacheDir' => '',
    'charset'  => 'utf8',
    'DBCollat' => 'utf8_general_ci',
    'swapPre'  => '',
    'encrypt'  => false,
    'compress' => false,
    'strictOn' => false,
    'failover' => [],
    'port'     => 21236,
];

我已经尝试使用主机名 db_mysql 可以使用相应的端口进行 ping 操作,甚至可以检查 canyouseeme.org 上的开放端口是否返回正常。

我应该如何解决这个问题?

PS:所有必要的扩展都已安装并启用,包括 php_mysqli php_mbstring php_pdo 如有遗漏请指出。

【问题讨论】:

  • 在你尝试的主机名可能是 172.21.0.4:3306

标签: php mysql docker codeigniter codeigniter-4


【解决方案1】:

如果它在 docker 上,你必须在外面打开端口,主机应该是你的容器名称

ports:
  - "33088:3306"

'hostname' => 'container_name',

如果您不使用 .env 将配置参数传递给 docker,请在容器级别指定它。 (下例)

environment:
  DB_DATABASE: db_mysql
  DB_USERNAME: .........

我的项目示例代码

在 docker-compose.yml

services:
  ## -----------------------------------------------
  ##           MySql database
  ## -----------------------------------------------
  db_mysql:
    image: mysql:5.7
    restart: always
    volumes:
      - db_mysql:/var/lib/mysql
      - ./mysql:/docker-entrypoint-initdb.d
    command: --default-authentication-plugin=mysql_native_password
    environment:
      MYSQL_ROOT_PASSWORD: root
    deploy:
      mode: global
    ports:
      - "33088:3306"

在数据库文件中(我用的是 Laravel。但在 Codeigniter 中是一样的)

public $default = [
    'DSN'      => '',
    'hostname' => 'db_mysql',
    'username' => 'root',
    'password' => '',
    'database' => 'kr_main',
    'port'     => 33088,
];

【讨论】:

    【解决方案2】:

    所以,我自己不确定为什么会这样。我为这 3 个容器创建的网络就像一堆计算机的本地网络。所以它基本上归结为:

    1. 在 Docker 网络之外:使用端口转发。
    2. 在 Docker 网络内部:使用容器的默认端口。

    所以最后我只使用3306或者默认端口来访问mysql。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-09
      • 2012-10-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多