Laravel Docker Container не подключается к локальному mysql - PullRequest
1 голос
/ 27 мая 2019

У меня проблема с подключением к mysql, работающему на локальной машине в моем DockerFile, о котором я упоминал

FROM php:7
RUN apt-get update -y && apt-get install -y openssl zip unzip git
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN docker-php-ext-install pdo mbstring pdo_mysql
WORKDIR /home
COPY . /home
RUN composer install --ignore-platform-reqs

CMD php artisan serve --host=0.0.0.0 --port=8081
EXPOSE 8081

и это в моей конфигурации .env

DB_HOST=localhost
DB_DATABASE=databasename
DB_USERNAME=root
DB_PASSWORD=testpassword

Я очень мало знаю о том, где он терпит неудачу. Нужно ли устанавливать mysql для контейнера Docker?

Ответы [ 2 ]

1 голос
/ 27 мая 2019

вы пытаетесь подключиться к mysql в localhost, что (на удивление) является ссылкой на локальный хост.Так как это относительный адрес, внутри контейнера он разрешается как собственный адрес контейнера, и MySQL там не ждет вас ... так что для его решения - просто укажите его ip реального хоста вместо localhost или 127.0.0.1.

шаг 1 - исправить .env файл:

DB_HOST=<your_host_ip> #run `ifconfig` and look for your ip on `docker0` network
DB_DATABASE=databasename
DB_USERNAME=laravel_server #not root, since we are going to allow this user remote access.
DB_PASSWORD=testpassword

шаг 2 - создать выделенного пользователя:

открыть свой mysql: mysql -u root -p, введите пароль пользователя root и выполните следующее:

CREATE USER 'laravel_server'@'%' IDENTIFIED BY 'testpassword';
GRANT ALL PRIVILEGES ON databasename.* TO 'laravel_server'@'%'; 
FLUSH PRIVILEGES;

мы создали пользователя и дали ему разрешения.

шаг 3 - откройте mysql для удаленного доступа:

мы должны сделать так, чтобы он прослушивал все интерфейсы, а не только localhost, и поэтому мы выполняем:

sudo sed 's/.*bind-address.*/bind-address=0.0.0.0/' /etc/mysql/mysql.conf.d/mysqld.cnf

(вам будет предложено ввести пароль. Эта команда просто заменяет строку вфайл конфигурации mysql)

шаг 4 - обновление:

  1. в каталоге проекта: php artisan config:cache
  2. service mysql restart

затем создайте докер и снова запустите новый контейнер.это должно работать для вас.

0 голосов
/ 27 мая 2019

Я вижу два варианта -

  1. Использовать частный IP-адрес вашего хоста докера, т. Е. Где работает сервер MySQL.

  2. Использовать хостсетевой режим при запуске контейнера, если вы хотите использовать localhost.

    docker container --net=host ...

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