为了账号安全,请及时绑定邮箱和手机立即绑定

Docker + Laravel 问题 [SQLSTATE[HY000] [2002]

Docker + Laravel 问题 [SQLSTATE[HY000] [2002]

PHP
繁华开满天机 2022-07-29 10:15:09
我在 ubuntu 机器上安装了 docker,我正在尝试运行一个 laravel 应用程序。MySQL 服务service_name: mysql在 docker-compose.yml 文件和 .env 文件中有DB_HOST=mysql.我记得 .env 文件应该指出DB_HOST=mysql指向 mysql docker 服务 IP。然而这并没有发生,在运行迁移后我得到:Illuminate\Database\QueryException  : SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution (SQL: SHOW FULL TABLES WHERE table_type = 'BASE TABLE')首先我跑了docker-compose build,然后我跑了,我docker-compose up -d所有的 3 个服务都启动并运行了。如果我提取 MySQL 服务的 IP 并在这样的.env文件中使用它:DB_HOST=172.18.0.2然后我可以成功运行迁移,在这种情况下一切正常。但是,我认为这是不好的做法,因为如果重新启动 MySQL 服务,IP 地址可能会更改。我在这里遗漏了什么,为什么service_name在我的.env文件中使用DB_HOST无法解析数据库主机名?码头工人-compose.yml:version: '3'networks:  laravel:services:  nginx:    image: nginx:stable-alpine    container_name: nginx    ports:      - "8080:80"    volumes:      - ./src:/var/www/html      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf    depends_on:      - php      - mysql    networks:      - laravel  mysql:    image: mysql:5.7.22    container_name: mysql    restart: unless-stopped    tty: true    ports:       - "3306:3306"    volumes:       - ./mysql:/var/lib/mysql    environment:      MYSQL_DATABASE: laraone      MYSQL_USER: laraone_user      MYSQL_PASSWORD: secret      MYSQL_ROOT_PASSWORD: secret      SERVICE_TAGS: dev      SERVICE_NAME: mysql    networks:      - laravel  php:    build:      context: .      dockerfile: Dockerfile    container_name: php    volumes:       - ./src:/var/www/html    depends_on:      - mysql    ports:      - "9000:9000"    networks:      - laravel
查看完整描述

3 回答

?
慕少森

TA贡献2019条经验 获得超9个赞

我认为您尝试在 php docker 容器之外运行“php artisan migrate”命令。


您应该在 php 容器中运行 php artisan migrate 命令。


尝试关注;


docker ps --> list running containers


docker exec -it <your_container_id> bash

现在你可以跑了;


php artisan migrate

编辑:您也可以在不输入容器 bash 的情况下编写工匠命令,如下所示;


docker exec -i <your_container_id> php artisan migrate


查看完整回答
反对 回复 2022-07-29
?
郎朗坤

TA贡献1921条经验 获得超9个赞

对于仍然想要 dockerized Laravel 环境的任何人,请查看 Laravel Sail。它使您可以使用 alias 轻松地将命令路由到 docker 实例sail。喜欢sail artisan migrate

https://laravel.com/docs/8.x/sail

Laravel Sail 是一个轻量级的命令行界面,用于与 Laravel 的默认 Docker 开发环境进行交互。Sail 为使用 PHP、MySQL 和 Redis 构建 Laravel 应用程序提供了一个很好的起点,而无需之前的 Docker 经验。


查看完整回答
反对 回复 2022-07-29
?
慕森王

TA贡献1777条经验 获得超3个赞

我通过在 php 容器中安装 laravel 应用程序解决了这个问题。简单的 1 行命令帮助我解决了这个问题:docker exec -it php php artisan app:install



查看完整回答
反对 回复 2022-07-29
  • 3 回答
  • 0 关注
  • 300 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信