Laravel在Docker容器中-可以迁移但不能迁移

时间:2019-11-27 21:56:08

标签: laravel docker

所以我搜索了很多,每个人都说要么使.env文件中的数据库主机等于mysql,要么使docker容器ip都对我有用?

我很确定这是一个主机问题,但目前还不知道吗?

这是我的docker-compose.yml文件:

  

这是我在.env文件中的连接:

version: "2"
services:

  web:
    container_name: algm
    build:
      context: .
      dockerfile: container-build/web/Dockerfile
    environment:
    - MYSQL_DATABASE=dbname
    - MYSQL_USER=dbuser
    - MYSQL_PASSWORD=654321
    - MYSQL_HOST=db
    ports:
    - "8080:80"
    volumes:
    - .:/var/www
    depends_on:
    - db

  db:
    image: mysql:5.7
    ports:
    - "6603:3306"
    environment:
    - MYSQL_ROOT_PASSWORD=654321
    - MYSQL_USER=dbuser
    - MYSQL_PASSWORD=654321
    - MYSQL_DATABASE=dbname
    volumes:
    - "mysql_data:/var/lib/mysql"
    - ./data/schema.sql:/docker-entrypoint-initdb.d/schema.sql

volumes:
  mysql_data: { driver: local }

所以我通过以下命令进入docker bash:

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=dbname
DB_USERNAME=dbuser
DB_PASSWORD=654321

在那里我可以进行模型和迁移,但不能迁移?我收到错误消息:

sudo docker-compose exec web /bin/bash

更新,如果需要它,这是我的Dockerfile:

 Illuminate\Database\QueryException  : SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known (SQL: select * from information_schema.tables where table_schema = dbname and table_name = migrations and table_type = 'BASE TABLE')

  at /var/www/vendor/laravel/framework/src/Illuminate/Database/Connection.php:665
    661|         // If an exception occurs when attempting to run a query, we'll format the error
    662|         // message to include the bindings with SQL, which will make this exception a
    663|         // lot more helpful to the developer instead of just the database's errors.
    664|         catch (Exception $e) {
  > 665|             throw new QueryException(
    666|                 $query, $this->prepareBindings($bindings), $e
    667|             );
    668|         }
    669| 

  Exception trace:

  1   PDOException::("PDO::__construct(): php_network_getaddresses: getaddrinfo failed: Name or service not known")
      /var/www/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70

  2   PDO::__construct("mysql:host=mysql;port=3306;dbname=dbname", "dbuser", "654321", [])
      /var/www/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70

  Please use the argument -v to see more details.

1 个答案:

答案 0 :(得分:2)

我已经尝试过您的配置,并且可以正常工作。您只需要将DB_HOST=mysql更改为您的容器名称DB_HOST=db

DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=dbname
DB_USERNAME=dbuser
DB_PASSWORD=654321

然后转到容器内的应用文件夹,并运行php artisan config:clearphp artisan cache:clear,然后执行迁移。