php - 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'
如何解决我的问题?
解决方案
我根据您的 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
- 构建并运行所有容器
docker-compose up --build
db
从新my-new-network
网络中的其他容器向容器发送 ping :
- 完成 - 容器可以通信
推荐阅读
- python - 如何使用 Python GetOldTweets3 从 Twitter 中排除回复和转发
- microsoft-graph-api - GraphAPI 查询邮箱类型
- ios - 在 react-native 中单击按钮时如何显示计时器当前值?
- java - 从属性文件中读取值并在 .less 文件中使用该值
- c - 用 valgrind 理解结果
- c++ - 在 C++ 函数中计算斐波那契并抛出编译时错误
- string - 如何从文件中读取所有字符串 - C++
- r - 检查项目是否存在于 R 的嵌套列表中
- pandas - 根据当前事件索引,以及另一列的下一个事件的索引进行操作 [pandas]
- php - 联系表 - 在电子邮件问题正文中显示项目