laravel [2002]关于我们-SQLSTATE [HY000][2002] php_网络获取地址:获取地址信息失败:名称或服务未知

relj7zay  于 2022-12-24  发布在  PHP
关注(0)|答案(7)|浏览(119)

当我在我的容器中运行 php artisan migrate 时,我一直收到此错误

In Connector.php line 67:

  SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known

In Connector.php line 67:

  PDO::__construct(): php_network_getaddresses: getaddrinfo failed: Name or service not known

这是我的.ENV文件

APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:etukbJpSLgbRsdf5uOEGtLT5Qw+XB6y06Q38HPr
APP_DEBUG=true
APP_LOG_LEVEL=debug
APP_URL=http://127.0.0.1:8000/

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=project
DB_USERNAME=root
DB_PASSWORD=

BROADCAST_DRIVER=log
CACHE_DRIVER=file
SESSION_DRIVER=file
SESSION_LIFETIME=120
QUEUE_DRIVER=sync

PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
PUSHER_APP_CLUSTER=mt1

我尝试将DB_HOST更改为mysql,但结果仍然相同,并将其更改为mariadb
这是我的docker-compose文件

version: '3'
services:

 # The Application
  app:
    build:
      context: ./
      dockerfile: app.dockerfile
    working_dir: /var/www
    volumes:
      - ../.:/var/www
      - ./custom.ini:/usr/local/etc/php/conf.d/custom.ini
    environment:
      - "DB_PORT=3306"
      - "DB_HOST=database"

 # The Web Server
  web:
    build:
      context: ./
      dockerfile: web.dockerfile
    working_dir: /var/www
    volumes:
      - ../.:/var/www
      - ./vhost.conf:/etc/nginx/conf.d/default.conf
    ports:
      - 8082:80

  # The Database
  database:
    image: mysql:5.7
    volumes:
      - dbdata:/var/lib/mysql
    environment:
      MYSQL_USER: ${DB_USERNAME}
      MYSQL_DATABASE: ${DB_DATABASE}
      MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
    ports:
        - "33061:3306"

volumes:
  dbdata:

我在网上搜索了解决方案,但是没有一个有帮助。关于为什么我一直得到那个错误,有人有什么建议吗?

vlurs2pr

vlurs2pr1#

应将container_name添加到数据库服务中

database:
image: mysql:5.7
container_name: database

并在.env MYSQL_HOST中引用该名称,如下所示:

MYSQL_CONNECTION=mysql
MYSQL_HOST=database
MYSQL_PORT=3306

而不是使用localhost
还应使用网络连接数据库服务和应用程序
添加一个网络块到docker-compose的末尾

networks:
  app-network:
    driver: bridge

并将此块添加到数据库服务和应用程序服务的末尾

demo_db:
   .
   .
   .    
   networks:
      - app-network
  app:
   .
   .
   .
   networks:
      - app-network

这里是一个工作演示停靠一个简单的laravel应用程序
https://bitbucket.org/RamiAmro/hello-laravel-docker/

nbysray5

nbysray52#

It happens when the laravel application running in docker is not able to connect to database. I hope this could be helpful for those who have gone through the solution and not yet succeeded. I had similar problem and tried to change the DB_HOST localhost to 127.0.0.1 also with the name of the container/db host (as mentioned in docker-compose), yet I could not get this error resolved. So I updated my .env file like this:

DB_CONNECTION=mysql
DB_HOST=host.docker.internal
DB_PORT=3308 or any other port
DB_DATABASE=your_database_name
DB_USERNAME=your_user_name
DB_PASSWORD=your_password

开始工作了。我不能保证它100%工作,但你可以试一试,以防其他选择不起作用。
干杯!

t9aqgxwy

t9aqgxwy3#

如果您要作为外部Docker容器连接到mysql,请确保您实现了此解决方案https://stackoverflow.com/a/38089080/1770571

9wbgstp7

9wbgstp74#

我也遇到了同样的问题。在我的例子中,我发现在航行日志中可以看到恢复InnoDB数据库时出现了问题

!!小心(这将删除整个数据库)!!

由于这是我的开发环境,我尝试 * 删除现有卷 *
第一个月
然后再调出一个新容器
./vendor/bin/sail up

fjnneemd

fjnneemd5#

现在还有Laravel Sail给任何感兴趣的人。
https://laravel.com/docs/8.x/sail
Laravel Sail是一个轻量级的命令行界面,用于与Laravel默认的Docker开发环境进行交互。Sail为使用PHP、MySQL和Redis构建Laravel应用程序提供了一个很好的起点,而不需要以前的Docker经验。

f3temu5u

f3temu5u6#

我也遇到了同样的问题,我在文档中发现,当使用Sail时,应该使用Sail而不是php运行所有命令。例如“php工匠迁移”=〉“Sail工匠迁移”。
了解更多信息:https://laravel.com/docs/9.x/sail#executing-sail-commands

tzcvj98z

tzcvj98z7#

我在ENV文件中通过DB_HOST=0.0.0.0解决了它,因为Docker在该端口上工作。

相关问题