首页 > 解决方案 > Yii2 在 docker 上进阶

问题描述

我在docker上有yii2高级应用,mysql db不工作。

我的码头工人撰写:

db:
  image: 'mysql:latest'
  volumes:
      - ./database:/var/lib/mysql
  ports:
      - '3306:3306'
  restart: always
  environment:
     MYSQL_ROOT_PASSWORD: pass
     MYSQL_DATABASE: database

yii2中的数据库:

return => [
        'class' => 'yii\db\Connection',
        'dsn' => 'mysql:host=127.0.0.1;port=3306;dbname=database',
        'username' => 'root',
        'password' => 'pass',
        'charset' => 'utf8',
    ],

当我用 yii2 进入我的本地文件夹并去时,php yii migrate我看到了Exception 'yii\db\Exception' with message 'SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client'

如何解决我的问题?

所有代码https://github.com/k0v4back/docker-yii2

标签: phpdockeryii2

解决方案


我根据您的 docker-compose.yml 文件创建了这个答案

在 docker-compose.yml 文件中创建新的桥接网络:

networks:
  my-new-network:
    driver: bridge

将所有容器连接到一个网络(网桥)以允许它们之间的通信非常重要。

将每个容器添加到新网络:

db:
  image: 'mysql:latest'
  volumes:
      - ./database:/var/lib/mysql
  ports:
      - '3306:3306'
  restart: always
  environment:
     MYSQL_ROOT_PASSWORD: pass
     MYSQL_DATABASE: database
  networks:
     - my-new-network

在这些更改之后,检查容器是否可以通信(从一个发送 ping 到另一个 - 使用容器名称):

从 nginx 容器:

ping db

如果您没有ping命令,请安装 iputils:

apt-get update
apt-get install iputils-ping

如果一切正常 - 更改您的 Yii DB 连接配置:

return => [
    'class' => 'yii\db\Connection',
    'dsn' => 'mysql:host=db;port=3306;dbname=database', // change IP here to database container name
    'username' => 'root',
    'password' => 'pass',
    'charset' => 'utf8',
],

我认为这应该有助于解决您的问题。照顾容器之间的通信:)


还要确保数据库可以接受外部连接。默认 mysql 配置阻止外部连接,因此您应该检查您的 mysql 配置并添加可以“从外部”(从外部主机/网络)登录的新用户:

CREATE USER 'newuser'@'%' IDENTIFIED BY 'password';

mysql root 用户默认禁用远程连接。更多你可以在这里阅读

日志会告诉你更多:) https://docs.docker.com/engine/reference/commandline/logs/


我分叉了你的存储库:https ://github.com/raciniewski/docker-yii2

  1. 构建并运行所有容器docker-compose up --build

在此处输入图像描述

在此处输入图像描述

  1. db从新my-new-network网络中的其他容器向容器发送 ping :

在此处输入图像描述 在此处输入图像描述

  1. 完成 - 容器可以通信

推荐阅读