首页 > 解决方案 > 执行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'”。我做错了什么?

标签: dockeryii2docker-composeyii2-basic-app

解决方案


使用 docker-compose 时,您的主机将由服务名称引用。所以你会有host=mysql你的情况,而不是host=127.0.0.1.

如果你运行 docker-compose 不同的服务就像不同的主机。您在 php(服务名称)应用程序中运行 Web 应用程序,该应用程序将数据库服务连接到 mysql(服务名称)应用程序


推荐阅读