首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Laravel SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo失败:名称或服务未知

Laravel SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo失败:名称或服务未知
EN

Stack Overflow用户
提问于 2019-12-03 10:32:36
回答 6查看 14.9K关注 0票数 5

在我的容器中,当我运行php artisan迁移时,我一直收到这个错误。

代码语言:javascript
运行
复制
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文件

代码语言:javascript
运行
复制
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。

这是我的码头-撰写文件

代码语言:javascript
运行
复制
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:

我在网上寻找解决方案,但没有人帮上忙。有人建议我为什么老是犯这个错误吗?

EN

回答 6

Stack Overflow用户

发布于 2019-12-03 10:58:25

应该向数据库服务添加一个container_name。

代码语言:javascript
运行
复制
database:
image: mysql:5.7
container_name: database

并将.env MYSQL_HOST中的名称引用为:

代码语言:javascript
运行
复制
MYSQL_CONNECTION=mysql
MYSQL_HOST=database
MYSQL_PORT=3306

而不是使用本地主机

您还应该使用网络连接数据库服务和应用程序。

将网络块添加到对接器-组合的末尾。

代码语言:javascript
运行
复制
networks:
  app-network:
    driver: bridge

并将此块添加到数据库服务器和app servce的末尾。

代码语言:javascript
运行
复制
demo_db:
   .
   .
   .    
   networks:
      - app-network
  app:
   .
   .
   .
   networks:
      - app-network

下面是一个简单的laravel应用程序的工作演示

https://bitbucket.org/RamiAmro/hello-laravel-docker/

票数 13
EN

Stack Overflow用户

发布于 2022-06-13 18:37:31

当在docker中运行的laravel应用程序无法连接到数据库时,就会发生这种情况。我希望这能对那些已经通过解决办法但尚未成功的人有所帮助。我也遇到了类似的问题,试图将DB_HOST本地主机更改为127.0.0.1,并使用容器/db主机的名称(如中提到的那样),但无法解决此错误。因此,我更新了我的.env文件如下:

代码语言:javascript
运行
复制
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%的工作,但你可以尝试一下,以防其他选择不起作用。

干杯!

票数 1
EN

Stack Overflow用户

发布于 2020-08-16 09:16:55

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59155046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档