如何执行yii迁移时解决错误Exception?

时间:2018-07-13 18:45:06

标签: docker yii2 docker-compose yii2-basic-app

我尝试在ubuntu 18.04中使用docker运行yii2基本项目。这是我的docker-compose.yml:

<div *ngFor="let doc of documents; let last = last"> <!-- iterate over all documents, let last = last is optional -->
    <p>Id: {{doc.id}}</p>
     <!-- iterate over all names (n) for every document (doc) -->
    <p>Names: <span *ngFor="let n of doc.names; last as lastName">{{n.name}}{{lastName ? '': ','}} </span></p>
     <!-- iterate over all cities (c) for every document (doc) -->
    <p>Cities: <span *ngFor="let c of doc.cities; last as lastCity">{{c.city}}{{lastCity ? '': ','}} </span></p>
     <!-- optional , this will add a separator between documents-->
    <hr *ngIf="!last"/>
</div>

这是config / db.php:

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'

我使用与yii2 Advanced中相同的文件夹控制台/迁移。 当我运行命令./yii migration时,发生错误“异常'yii \ db \ Exception',消息为'SQLSTATE [HY000] [2002]连接被拒绝'”。在另一种情况下,当host = mysql时,出现错误“异常'yii \ db \ Exception',消息为'SQLSTATE [HY000] [2002] php_network_getaddresses:getaddrinfo失败:名称或服务未知”。 我做错了什么?

1 个答案:

答案 0 :(得分:1)

在使用docker-compose时,将通过服务名称来引用您的主机。 因此您需要的是host=mysql,而不是host=127.0.0.1

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