Docker + Laravel问题[SQLSTATE [HY000] [2002] php_network_getaddresses:getaddrinfo失败:名称解析暂时失败]

时间:2020-01-22 15:08:17

标签: php mysql laravel docker docker-compose

我在ubuntu机器上安装了docker,我正在尝试运行laravel应用。

MySQL服务的docker-compose.yml文件中包含service_name: mysql,而.env文件中的DB_HOST=mysql中。

我记得.env文件应该弄清楚DB_HOST=mysql指向mysql docker service 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的{​​{1}}文件中使用.env不能解析数据库主机名?

docker-compose.yml:

DB_HOST

.env:

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

2 个答案:

答案 0 :(得分:3)

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

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

尝试以下;

docker ps --> list running containers

docker exec -it <your_container_id> bash

现在你可以运行了;

php artisan migrate

答案 1 :(得分:0)

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