我在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'
如何解决我的问题?
答案 0 :(得分:1)
在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
docker-compose up --build
db
网络中的其他容器发送ping到my-new-network
容器: