Docker + Laravel проблема [SQLSTATE [HY000] [2002] php_network_getaddresses: сбой getaddrinfo: временный сбой в разрешении имени] - PullRequest
1 голос
/ 22 января 2020

У меня docker установлено на машине с Ubuntu, и я пытаюсь запустить приложение laravel.

MySQL Сервис имеет service_name: mysql в файле docker -compose.yml и. Файл env имеет DB_HOST=mysql.

Насколько я помню, файл .env должен выяснить, что DB_HOST=mysql указывает на IP-адрес mysql docker. Однако этого не происходит, и после выполнения миграций я получаю:

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 моих служб запущены и работают.

Если я извлекаю IP-адрес MySQL службы и использую его в .env файле, например:

DB_HOST=172.18.0.2

Затем я могу успешно выполнить миграцию, и в этом случае все работает нормально.

Однако я считаю это плохой практикой, поскольку IP-адрес может быть изменен при перезапуске службы MySQL. Я что-то здесь упускаю, почему использование service_name в моем .env файле для DB_HOST не может определить имя хоста БД?

docker -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

.env:

APP_NAME=Laraone
APP_ENV="local"
APP_KEY=base64:PMwGrcSu2ioPEj75dv5gcdWAogESOtt8UCr/gs0nOtw=
APP_DEBUG=true
APP_URL=http://localhost:8080

LOG_CHANNEL=stack

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=laraone
DB_USERNAME=laraone_user
DB_PASSWORD=secret

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

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=
REDIS_PORT=6379

MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=
MAIL_PASSWORD=
MAIL_ENCRYPTION=

MAIL_FROM_ADDRESS=noreply@example.com
MAIL_FROM_NAME="${APP_NAME}"

MAIL_SENDMAIL="/usr/sbin/sendmail -bs"

1 Ответ

0 голосов
/ 24 января 2020

Я решил проблему, установив приложение laravel внутри контейнера php. Простая однострочная команда, которая помогла мне решить эту проблему: docker exec -it php php artisan app:install

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...