Docker MySQL не работает

268
08 сентября 2021, 06:50

Только начала пользоваться Docker. Не могу понять почему не работает MySQL. Очень нужна помощь.

файл .yml

version: '2'
services:
    nginx:
        image: nginx:latest
        ports:
            - "80:80"
            - "344:344"
        volumes:
            - ./hosts:/etc/nginx/conf.d
            - ./www:/var/www
            - ./logs:/var/log/nginx
        links:
            - php
    php:
        build: ./images/php
        links:
            - mysql
        volumes:
            - ./www:/var/www
    mysql:
        image: mysql:5.7
        ports:
            - "3306:3306"
        volumes:
            - ./init.sql:/mysql/init.sql
        environment:
            MYSQL_ROOT_PASSWORD: polinanov_avito
            MYSQL_DATABASE: polinanov_avito
            MYSQL_USER: polinanov_avito
            MYSQL_PASSWORD: polinanov_avito
        networks:
            - wp-net
networks:
    wp-net:
        driver: bridge

Функция подключения к базе данных

$link = mysqli_connect( 
        'mysql',
        'polinanov_avito',     
        'polinanov_avito',  
        'polinanov_avito');

Dockerfile:

FROM php:7.1-fpm
MAINTAINER Polina <ms.polinanov@mail.ru>
RUN apt-get update && apt-get install -y\
        curl \
        wget \
        git \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libmcrypt-dev \
        libpng-dev \
    && docker-php-ext-install -j$(nproc) iconv mcrypt mbstring mysqli pdo_mysql zip \
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
    && docker-php-ext-install -j$(nproc) gd
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
ADD php.ini /usr/local/etc/php/conf.d/40-custom.ini
WORKDIR /var/www
CMD ["php-fpm"]

Ошибки при попытке вызова функции:

<b>Warning</b>:  mysqli_connect(): php_network_getaddresses: getaddrinfo failed: Name or service not known in <b>/var/www/hello.dev/classApi.php</b> on line <b>93</b><br />
<br />
<b>Warning</b>:  mysqli_connect(): (HY000/2002): php_network_getaddresses: getaddrinfo failed: Name or service not known in <b>/var/www/hello.dev/classApi.php</b> on line <b>93</b><br />
"Internal Error BD"
Answer 1

php_network_getaddresses: getaddrinfo failed: Name or service not known in ...

Backend не может подключиться к mysql.

php:
  links:
    - mysql
mysql:
  networks:
    - wp-net

Почему? Не связаны одной сетью. Советую использовать api версии не старее 3.0.

version: 3.0
services:
  php:
    networks:
      - net
    environment:
      - MYSQL_HOST=mysql.example_net
      - MYSQL_PORT=3306
      - MYSQL_ROOT_PASSWORD: polinanov_avito
      - MYSQL_DATABASE: polinanov_avito
      - MYSQL_USER: polinanov_avito
      - MYSQL_PASSWORD: polinanov_avito 
  mysql:
    networks:
      - net
networks:
  - net # bridge by default

Почему версию 3.0?

В ней для связи ипользуются dns нотация. К примеру для mysql - mysql.project_path_net:3306. Можно менять название проекта через env переменную COMPOSE_PROJECT_NAME=test в .env файле -> mysql.test_net:3306.

Для коннекта к базе используем переменные окружения, а не харкодим их.

READ ALSO
Как подключиться к БД удаленно?

Как подключиться к БД удаленно?

У клиента есть сайт который размещен на платном хостингеКак мне подключиться к БД сайта удаленно через OS Panel? Есть все доступы к БД и к личному...

125
MySQL как начать вывод строк после определенного ID?

MySQL как начать вывод строк после определенного ID?

Есть сайт вопросов и ответов, в нём, в конце списка вопросов, повесил кнопку "Показать еще" (вопросы)Эта кнопка передает ajax запросом в php скрипт,...

213
Как разделить Telegram кнопки (команды) и вводимый текст?

Как разделить Telegram кнопки (команды) и вводимый текст?

Создал бота Telegram, который по нажатию на кнопки выводит заданные результате по командам: /help /test и тд

176