SQLSTATE [HY000] [2002]没有这样的文件或目录“ Docker-Compose Mysql Laravel

问题描述 投票:0回答:1

我目前正在使用docker compose开发laravel-vue-mysql环境。

我以这些文章link link为指导

我的docker compose工作正常,Web和应用程序服务运行良好,应按需进行部署。但是我无法配置我的数据库。我正在尝试执行docker-compose exec app php artisan migrate,但是我有SQLSTATE没有此类文件或目录异常,因此在此卡住了3天。

这是我的docker-compose.yml

version: '2'
services:

  # The Application
  app:
    build:
      context: ./
      dockerfile: app.dockerfile
    container_name: app      
    working_dir: /var/www
    volumes:
      - ./:/var/www
    environment:
      - "DB_PORT= 3306"
      - "DB_HOST= database"

  # The Web Server
  web:
    build:
      context: ./
      dockerfile: web.dockerfile
    container_name: web      
    working_dir: /var/www
    volumes_from:
      - app
    ports:
      - 8080:80

# The Database
  database:
    build:
      context: ./
      dockerfile: db.dockerfile
    image: mysql:5.7
    container_name: db  
    environment:
      - MYSQL_DATABASE= "homestead"
      - MYSQL_USER= "root"
      - MYSQL_PASSWORD= "s"
      - MYSQL_ROOT_PASSWORD= "s"
    volumes:
      - dbdata:/var/lib/mysql
    ports:
        - "33061:3306"
#Volumes
volumes:
  dbdata:

app.dockerfile

FROM php:7.3-fpm

# Update packages
RUN apt-get update

# Install PHP and composer dependencies
RUN apt-get install -qq git curl libmcrypt-dev libjpeg-dev libpng-dev libfreetype6-dev libbz2-dev

# Clear out the local repository of retrieved package files
# RUN apt-get clean

# Install needed extensions
# Here you can install any other extension that you need during the test and deployment process
RUN apt-get -y install libzip-dev
RUN pecl install mcrypt-1.0.3 
RUN docker-php-ext-enable mcrypt
RUN apt-get clean; docker-php-ext-install pdo pdo_mysql zip gd pcntl opcache bcmath


# Installs Composer to easily manage your PHP dependencies.
RUN curl --silent --show-error https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

# Install Node
RUN apt-get update &&\
    apt-get install -y --no-install-recommends gnupg &&\
    curl -sL https://deb.nodesource.com/setup_10.x | bash - &&\
    apt-get update &&\
    apt-get install -y --no-install-recommends nodejs &&\
    npm config set registry https://registry.npm.taobao.org --global &&\
    npm install --global gulp-cli

CMD php-fpm

db.dockerfile

FROM mysql:5.7

# Setup the custom configuration
ADD my.cnf /mysql/mysql.conf.d/my.cnf

web.dockerfile

FROM nginx:1.10

ADD vhost.conf /etc/nginx/conf.d/default.conf
WORKDIR /var/www

。env

DB_CONNECTION=mysql
DB_HOST=database
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=root
DB_PASSWORD=s
DATABASE_URL= mysql://root@database:330601/homestead

vhost.config

server {
    listen 80;
    index index.php index.html;
    root /var/www/public;

    location / {
        try_files $uri /index.php?$args;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass app:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}

这是我的.cnf

    [mysqld]
    # Accept connections from any IP address
    general_log = 1
    general_log_file = /var/lib/mysql/general.log
    bind-address                = 0.0.0.0
    socket= /var/run/mysqld/mysqld.sock
    #skip-grant-tables

这是我的app / config / database.php

'mysql' => [
    'driver' => 'mysql',
    'url' => env('DATABASE_URL'),
    'host' => env('DB_HOST','database'),
    'port' => env('DB_PORT', '3306'),
    'database' => env('DB_DATABASE', 'forge'),
    'username' => env('DB_USERNAME', 'forge'),
    'password' => env('DB_PASSWORD', ''),
    'unix_socket' => '/var/run/mysqld/mysqld.sock',
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_unicode_ci',
    'prefix' => '',
    'prefix_indexes' => true,
    'strict' => true,
    'engine' => null,
    'options' => extension_loaded('pdo_mysql') ? array_filter([
        PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
    ]) : [],
],

[当我尝试迁移mysql数据库时,会向我返回此错误:

Illuminate\Database\QueryException  : SQLSTATE[HY000] [2002] No such file or directory (SQL: select * from information_schema.tables where table_schema = homestead and table_name = migrations and table_type = 'BASE TABLE')

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

  Exception trace:

  1   Doctrine\DBAL\Driver\PDOException::("SQLSTATE[HY000] [2002] No such file or directory")
      /var/www/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php:31

  2   PDOException::("SQLSTATE[HY000] [2002] No such file or directory")
      /var/www/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php:27

  3   PDO::__construct("mysql:unix_socket=/var/run/mysqld/mysqld.sock;dbname=homestead", "root", "secret", [])
      /var/www/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php:27

  4   Doctrine\DBAL\Driver\PDOConnection::__construct("mysql:unix_socket=/var/run/mysqld/mysqld.sock;dbname=homestead", "root", "secret", [])
      /var/www/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:67

  5   Illuminate\Database\Connectors\Connector::createPdoConnection("mysql:unix_socket=/var/run/mysqld/mysqld.sock;dbname=homestead", "root", "secret", [])
      /var/www/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:46

  6   Illuminate\Database\Connectors\Connector::createConnection("mysql:unix_socket=/var/run/mysqld/mysqld.sock;dbname=homestead", [])
      /var/www/vendor/laravel/framework/src/Illuminate/Database/Connectors/MySqlConnector.php:24

  7   Illuminate\Database\Connectors\MySqlConnector::connect()
      /var/www/vendor/laravel/framework/src/Illuminate/Database/Connectors/ConnectionFactory.php:182

  8   Illuminate\Database\Connectors\ConnectionFactory::Illuminate\Database\Connectors\{closure}()
      /var/www/vendor/laravel/framework/src/Illuminate/Database/Connection.php:924

  9   call_user_func(Object(Closure))
      /var/www/vendor/laravel/framework/src/Illuminate/Database/Connection.php:924

  10  Illuminate\Database\Connection::getPdo()
      /var/www/vendor/laravel/framework/src/Illuminate/Database/Connection.php:959

  11  Illuminate\Database\Connection::getReadPdo()
      /var/www/vendor/laravel/framework/src/Illuminate/Database/Connection.php:404

  12  Illuminate\Database\Connection::getPdoForSelect()
      /var/www/vendor/laravel/framework/src/Illuminate/Database/Connection.php:330

  13  Illuminate\Database\Connection::Illuminate\Database\{closure}("select * from information_schema.tables where table_schema = ? and table_name = ? and table_type = 'BASE TABLE'")
      /var/www/vendor/laravel/framework/src/Illuminate/Database/Connection.php:662

  14  Illuminate\Database\Connection::runQueryCallback("select * from information_schema.tables where table_schema = ? and table_name = ? and table_type = 'BASE TABLE'", Object(Closure))
      /var/www/vendor/laravel/framework/src/Illuminate/Database/Connection.php:629

  15  Illuminate\Database\Connection::run("select * from information_schema.tables where table_schema = ? and table_name = ? and table_type = 'BASE TABLE'", Object(Closure))
      /var/www/vendor/laravel/framework/src/Illuminate/Database/Connection.php:338

  16  Illuminate\Database\Connection::select("select * from information_schema.tables where table_schema = ? and table_name = ? and table_type = 'BASE TABLE'")
      /var/www/vendor/laravel/framework/src/Illuminate/Database/Schema/MySqlBuilder.php:18

  17  Illuminate\Database\Schema\MySqlBuilder::hasTable("migrations")
      /var/www/vendor/laravel/framework/src/Illuminate/Database/Migrations/DatabaseMigrationRepository.php:169

  18  Illuminate\Database\Migrations\DatabaseMigrationRepository::repositoryExists()
      /var/www/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php:590

  19  Illuminate\Database\Migrations\Migrator::repositoryExists()
      /var/www/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/MigrateCommand.php:91

  20  Illuminate\Database\Console\Migrations\MigrateCommand::prepareDatabase()
      /var/www/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/MigrateCommand.php:63

  21  Illuminate\Database\Console\Migrations\MigrateCommand::handle()
      /var/www/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php:32

  22  call_user_func_array([])
      /var/www/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php:32

  23  Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
      /var/www/vendor/laravel/framework/src/Illuminate/Container/Util.php:36

  24  Illuminate\Container\Util::unwrapIfClosure(Object(Closure))
      /var/www/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php:90

  25  Illuminate\Container\BoundMethod::callBoundMethod(Object(Illuminate\Foundation\Application), Object(Closure))
      /var/www/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php:34

  26  Illuminate\Container\BoundMethod::call(Object(Illuminate\Foundation\Application), [])
      /var/www/vendor/laravel/framework/src/Illuminate/Container/Container.php:590

  27  Illuminate\Container\Container::call()
      /var/www/vendor/laravel/framework/src/Illuminate/Console/Command.php:134

  28  Illuminate\Console\Command::execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Illuminate\Console\OutputStyle))
      /var/www/vendor/symfony/console/Command/Command.php:255

  29  Symfony\Component\Console\Command\Command::run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Illuminate\Console\OutputStyle))
      /var/www/vendor/laravel/framework/src/Illuminate/Console/Command.php:121

  30  Illuminate\Console\Command::run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
      /var/www/vendor/symfony/console/Application.php:1001

  31  Symfony\Component\Console\Application::doRunCommand(Object(Illuminate\Database\Console\Migrations\MigrateCommand), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
      /var/www/vendor/symfony/console/Application.php:271

  32  Symfony\Component\Console\Application::doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
      /var/www/vendor/symfony/console/Application.php:147

  33  Symfony\Component\Console\Application::run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
      /var/www/vendor/laravel/framework/src/Illuminate/Console/Application.php:93

  34  Illuminate\Console\Application::run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
      /var/www/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php:131

  35  Illuminate\Foundation\Console\Kernel::handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
      /var/www/artisan:37

我已经阅读了有关此问题的所有评论。我尝试用容器ip或容器db名称更改dbhost,我也尝试过更改database.php主机,但也没有用。我已将所有特权授予数据库中的root用户。该环境适用于项目,这是我工作中的第一个任务,我需要放置mysql并迁移表。有人可以帮我吗?

mysql-error-2002
1个回答
0
投票

您的应用程序app试图连接到本地unix套接字/var/run/mysqld/mysqld.sock,而不是环境变量中的服务器。

删除值前的空格:

DATABASE_URL= mysql://root@database:330601/homestead
             ^--------


environment:
  - "DB_PORT= 3306"
  - "DB_HOST= database"
             ^-------------

删除app/config/database.php

'unix_socket' => '/var/run/mysqld/mysqld.sock',
© www.soinside.com 2019 - 2024. All rights reserved.