Проблемы с Docker MySQL SQLSTATE [HY000] [2002] php_network_getaddresses: сбой getaddrinfo - PullRequest
0 голосов
/ 05 октября 2018

Я хочу настроить небольшую докерскую среду с php 7.2.10-fpm, nginx и mysql 5.7, чтобы запустить в ней Laravel 5.7.К сожалению, я получаю следующую ошибку при попытке подключиться к mysql из моей службы приложений (при попытке запустить docker-composer exec app php artisan migrate):

In Connector.php
SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known
PDO::__construct(): php_network_getaddresses: getaddrinfo failed: Name or service not known

При попытке запустить docker-compose exec app mysql -u root -p возвращается: ERROR 2002 (HY000): Can 't подключиться к локальному серверу MySQL через сокет '/var/run/mysqld/mysqld.sock' (2 «Нет такого файла или каталога»)

Запуск и сборка моего контейнера с помощью docker-compose up --build не вызывает ошибок.Это говорит о том, что mysql работает и ждет подключения.Я также удалил и заново создал все изображения с помощью docker system prune --force --volumes.

Может быть, я что-то упустил в моем docker-compose.yml?

version: '3.3'
services:
  app:
    build:
      context: ./
      dockerfile: app.dockerfile
    working_dir: /var/www
    volumes:
      - ./../backend:/var/www
    environment:
      - "DB_PORT=3306"
      - "DB_HOST=database"
  web:
    build:
      context: ./
      dockerfile: web.dockerfile
    working_dir: /var/www
    depends_on:
      - mysql
    volumes:
      - ./../backend:/var/www
    ports:
        - 8080:80
  mysql:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      - "MYSQL_DATABASE=shop"
      - "MYSQL_USER=shop_u"
      - "MYSQL_PASSWORD=secret"
      - "MYSQL_ROOT_PASSWORD=secret"
    ports:
      - 33061:3306
    command: --disable-partition-engine-check
volumes:
  db_data:

App.dockerfile:

FROM php:7.2.10-fpm

RUN apt-get update
RUN apt-get install -y libmcrypt-dev
RUN apt-get install -y mysql-client
RUN apt-get install -y libmagickwand-dev --no-install-recommends
RUN pecl install imagick
RUN docker-php-ext-enable imagick
RUN docker-php-ext-install pdo_mysql
RUN pecl install mcrypt-1.0.1
RUN docker-php-ext-enable mcrypt
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
RUN php -r "if (hash_file('SHA384', 'composer-setup.php') === '93b54496392c062774670ac18b134c3b3a95e5a5e5c8f1a9f115f203b75bf9a129d5daa8ba6a13e2cc8a1da0806388a8') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
RUN php composer-setup.php
RUN php -r "unlink('composer-setup.php');"
RUN mv composer.phar /usr/local/bin/composer
RUN apt-get install -y git
RUN apt-get update && apt-get install -y zlib1g-dev
RUN docker-php-ext-install zip

И, наконец, мой .env-файл от Laravel:

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=shop
DB_USERNAME=shop_u
DB_PASSWORD=secret

Обновление

docker-compose images перечисляет мне следующие контейнеры:

+-----------------+-------------------+----------------+
|    Container    |    Repository     |    ImageID     |
+-----------------+-------------------+----------------+
| docker_app_1    |  docker_app       |   a94dba376130 |
| docker_mysql_1  |  docker_database  | 563a026a1511   |
| docker_web_1    |  docker_web       |   d9024ab40b73 |
+-----------------+-------------------+----------------+

Выполняется ping docker_mysql_1 из docker exec -it docker_app_1 bash приводит к bash: ping: command not found.

Запуск ping docker_mysql_1 из docker exec -it docker_web_1 bash работает нормально.

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