Yii2在Docker上高级

时间:2018-12-18 23:25:19

标签: php docker yii2

我在docker上有yii2 Advanced应用程序,mysql db无法正常工作。

我的docker-compose:

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

db:

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

1 个答案:

答案 0 :(得分:1)

我根据您的docker-compose.yml file

创建了此答案

在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配置和add new user,以便可以从外部(从外部主机/网络)登录:

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

mysql root用户默认禁用了远程连接。 More you can read here

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


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

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

enter image description here

enter image description here

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

enter image description here enter image description here

  1. 完成-容器可以通信