Для настройки доступа из контейнера Docker к локальному серверу MySQL вам потребуется выполнить несколько шагов.
1. Установите контейнер MySQL на ваш локальный сервер. Вы можете использовать официальный образ MySQL из Docker Hub и запустить его с помощью команды `docker run`.
```shell
docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=password -p 3306:3306 -d mysql:latest
```
В данном примере мы создаем контейнер с именем `mysql-container` и проксируем порт 3306, необходимый для подключения к серверу MySQL.
2. Укажите необходимые параметры подключения к серверу MySQL в вашем файле `docker-compose.yaml` для контейнера с PHP. Ниже приведен пример конфигурации:
```yaml
version: '3'
services:
php:
build:
context: .
dockerfile: Dockerfile
volumes:
- ./source:/var/www/html
ports:
- 8080:80
depends_on:
- mysql
mysql:
image: mysql:latest
environment:
- MYSQL_ROOT_PASSWORD=password
ports:
- 3306:3306
```
Обратите внимание, что в разделе `services` добавлен сервис MySQL, который использует официальный образ MySQL и указывает пароль root пользователя MySQL.
3. В вашем PHP-коде укажите соответствующие параметры подключения к серверу MySQL. Ниже приведен пример PHP-кода для подключения к серверу MySQL:
```php
<?php
$host = 'mysql';
$port = 3306;
$dbname = 'db_name';
$username = 'root';
$password = 'password';
$dsn = "mysql:host=$host;port=$port;dbname=$dbname";
try {
$db = new PDO($dsn, $username, $password);
echo "Connected to the database";
} catch (PDOException $e) {
echo "Connection failed: " . $e->getMessage();
}
?>
```
В приведенном выше примере мы используем `mysql` в качестве значения параметра хоста, чтобы обращаться к сервису MySQL, запущенному в контейнере Docker.
4. Запустите контейнеры из вашего файла `docker-compose.yaml` с помощью команды `docker-compose up`.
```shell
docker-compose up
```
Теперь ваш контейнер с PHP будет иметь доступ к локальному серверу MySQL через настроенное подключение.
Обратите внимание, что имя хоста `mysql`, используемое в конфигурации PHP, соответствует значению, указанному в `depends_on` для сервиса `php` в файле `docker-compose.yaml`. Если вы измените имя сервиса в `docker-compose.yaml`, убедитесь, что оно соответствует имени хоста в PHP-коде.
Также убедитесь, что проксирование портов выполнено правильно в файле `docker-compose.yaml`, чтобы контейнер с PHP мог подключаться к серверу MySQL. В приведенном выше примере мы использовали проксирование порта 3306 для контейнера MySQL и 8080 для контейнера PHP. Убедитесь, что эти порты не используются другими сервисами на вашем локальном сервере.