docker - 执行yii migrate时如何修复错误异常?
问题描述
我尝试在 ubuntu 18.04 中使用 docker 运行 yii2 基本项目。这是我的 docker-compose.yml:
version: '2'
services:
php:
image: yiisoftware/yii2-php:7.1-apache
volumes:
- ~/projects/basic/.composer-docker/cache:/root/.composer/cache:delegated
- ./:/app:delegated
ports:
- 8000:80
links:
- mysql
mysql:
image: mysql:5.7
volumes:
- ~/projects/basic/.composer-docker/mysql:/var/lib/mysql
environment:
- "MYSQL_ROOT_PASSWORD=secret"
- "MYSQL_USER=app"
- "MYSQL_PASSWORD=secret"
- "MYSQL_DATABASE=app"
ports:
- '33061:3306'
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: phpmyadmin
restart: always
environment:
PMA_HOST: mysql
MYSQL_USERNAME: app
MYSQL_ROOT_PASSWORD: secret
ports:
- 8080:80
volumes:
- /sessions
links:
- 'mysql:mysql'
这是配置/db.php:
return [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=127.0.0.1;dbname=app',
'username' => 'app',
'password' => 'secret',
'charset' => 'utf8',
我使用与 yii2 高级版中相同的文件夹控制台/迁移。当我运行命令 ./yii migrate 时,出现错误“Exception 'yii\db\Exception' with message 'SQLSTATE[HY000] [2002] Connection denied'”。在另一种情况下,当 host=mysql 出现错误“异常 'yii\db\Exception' 并带有消息 'SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known'”。我做错了什么?
解决方案
使用 docker-compose 时,您的主机将由服务名称引用。所以你会有host=mysql
你的情况,而不是host=127.0.0.1
.
如果你运行 docker-compose 不同的服务就像不同的主机。您在 php(服务名称)应用程序中运行 Web 应用程序,该应用程序将数据库服务连接到 mysql(服务名称)应用程序
推荐阅读
- sql-server - 如何在 SSRS 堆积图数据标签中隐藏零值
- selenium-webdriver - 网页中的字段在自动化过程中表现不同。可能吗?
- javascript - webpack 4 - 用于多个条目的拆分块插件
- jquery - jQuery-ui selectable 在 bootstrap 3 模式下无法正常工作
- vim - Vim:当命令栏展开时停止文本向上滚动
- python - 如何对 QTableWidget 列值进行排序?
- php - 解决 URL 注入
- node.js - 如何使用环回包含关系过滤数据?
- python - 使用 Python 从互联网上获取与给定关键字相关的所有 url
- unity3d - ElectronJS 中的 Unity 游戏?