Запуск PHPMyAdmin в Docker: быстрое руководство
Быстрые ссылки
- Базовое использование
- Преднастройка сервера
- Подключение к MySQL в Docker
- Упрощение развёртывания с Docker Compose
- Настройка установки
- Безопасность и лучшие практики
- Контрольный список и критерии приёмки
- Резюме

PHPMyAdmin — популярный веб-интерфейс для управления базами данных MySQL и MariaDB. Он позволяет просматривать схемы, таблицы и данные прямо в браузере, выполнять SQL-запросы и управлять пользователями.
Ниже показано, как использовать официальный Docker-образ phpmyadmin для быстрого развертывания инстанции в контейнеризированной среде.
Базовое использование
Самый простой способ — запустить контейнер PHPMyAdmin и позволить ему подключаться к любому доступному серверу базы данных (arbitrary mode):
docker run -d --name phpmyadmin -e PMA_ARBITRARY=1 -p 8080:80 phpmyadminКоманда запустит PHPMyAdmin и откроет порт 8080 на хосте. Перейдите в браузере по адресу http://localhost:8080 чтобы увидеть экран входа. Переменная окружения PMA_ARBITRARY=1 отображает форму для ручного указания хоста и порта сервера. Введите хост, имя пользователя и пароль MySQL/MariaDB для входа.

Если при первом подключении сервер не содержит базы данных с именем phpmyadmin, вы увидите предупреждение о том, что часть расширённых функций отключена. PHPMyAdmin использует базу phpmyadmin для хранения собственной конфигурации.

Нажмите ссылку «Create a database», чтобы создать схему phpmyadmin. Учётная запись, под которой выполняется вход, должна иметь права на создание баз данных.
Преднастройка сервера
Вместо режима произвольного подключения можно жестко задать подключение к конкретному серверу. Задайте переменные окружения PMA_HOST и опционально PMA_PORT:
docker run -d --name phpmyadmin -e PMA_HOST=mysql.example.com -e PMA_PORT=33060 -p 8080:80 phpmyadminЕсли PMA_PORT не задан, по умолчанию будет использоваться 3306. В этом режиме PHPMyAdmin будет доступен только для подключения к mysql.example.com; на экране входа потребуется только имя пользователя и пароль.
Чтобы позволить выбирать из нескольких серверов, задайте PMA_HOSTS и PMA_PORTS в виде списков через запятую (например: PMA_HOSTS=db1.example.com,db2.example.com и PMA_PORTS=3306,3307).
Подключение к MySQL в Docker
Частая ситуация — когда MySQL/MariaDB работает в отдельном контейнере. Есть два основных подхода:
- Открыть порт на хосте и подключаться по IP/localhost.
- Объединить контейнеры в общую Docker-сеть и использовать внутренние имена хостов.
В любом случае используйте PMA_HOST и PMA_PORT чтобы указать PHPMyAdmin, как подключаться.
Поддерживаются устаревшие Docker-линки, но их использование не рекомендуется:
docker run -d --name phpmyadmin --link my_mysql_container:db -p 8080:80 phpmyadminПредпочтительнее создать сеть и подключить контейнеры к ней:
docker network create phpmyadmindocker network connect phpmyadmin mysql_container_name --ip 172.17.0.1docker network connect phpmyadmin phpmyadmin_container_nameИли просто запустить PHPMyAdmin с флагом --network:
docker run -d --name phpmyadmin --network phpmyadmin -p 8080:80 phpmyadminПосле этого PHPMyAdmin сможет обращаться к контейнеру MySQL по внутреннему IP или по имени сервиса/контейнера. В примере выше можно задать PMA_HOST=172.17.0.1 или PMA_HOST=mysql_container_name.
Упрощение развёртывания с Docker Compose
Docker Compose удобен для повторяемого развёртывания стека. Ниже приведён корректный пример docker-compose.yml для режима произвольного подключения:
version: '3'
services:
phpmyadmin:
image: phpmyadmin:latest
ports:
- '8080:80'
environment:
PMA_ARBITRARY: '1'
restart: unless-stoppedА вот пример стека с MySQL и PHPMyAdmin в одной сети (связь по имени сервиса):
version: '3'
services:
mysql:
image: mysql:latest
expose:
- '3306'
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
volumes:
- mysql:/var/lib/mysql
restart: unless-stopped
phpmyadmin:
image: phpmyadmin:latest
ports:
- '8080:80'
environment:
PMA_HOST: mysql
PMA_PASSWORD: ${MYSQL_ROOT_PASSWORD}
restart: unless-stopped
volumes:
mysql:Запустите docker-compose up -d, чтобы поднять MySQL и PHPMyAdmin. В переменной PMA_HOST указан mysql — это имя сервиса из Compose; Docker автоматически настраивает DNS внутри сети.
Настройка установки
Образ phpmyadmin позволяет добавить собственный файл конфигурации через Docker volume. Путь внутри контейнера:
/etc/phpmyadmin/config.user.inc.php
Пример запуска с монтированием файла конфигурации:
docker run -d \
--name phpmyadmin \
-e PMA_ARBITRARY=1 \
-p 8080:80 \
-v my-config-file.php:/etc/phpmyadmin/config.user.inc.php \
phpmyadminВы можете установить любые параметры, поддерживаемые PHPMyAdmin. Кроме этого, образ поддерживает ряд переменных окружения, соответствующих настройкам PHP INI:
- MEMORY_LIMIT — значение memory_limit для PHP
- UPLOAD_LIMIT — максимальный размер загружаемого файла
- MAX_EXECUTION_TIME — max_execution_time для длительных запросов
Для секретов используйте Docker secrets: вместо значения переменной указывайте путь в контейнере с помощью суффикса _FILE.
Пример использования secret для хоста:
docker run -d --name phpmyadmin -e PMA_HOST_FILE=/run/secrets/pma_host -p 8080:80 phpmyadminБезопасность и лучшие практики
Важно помнить, что выставленный PHPMyAdmin в публичный интернет — это потенциальная уязвимость. Следующие рекомендации помогут снизить риск:
- Не используйте режим произвольного подключения на публичных интерфейсах. Лучше явно задать
PMA_HOST. - Ограничьте доступ с помощью сетевых правил: firewall, security groups, или Nginx/Traefik в качестве обратного прокси.
- Включите авторизацию на уровне прокси (basic auth или OAuth) для дополнительного слоя.
- Используйте TLS/HTTPS через обратный прокси; не подключайте MySQL поверх незащищённых каналов.
- Применяйте Docker secrets для чувствительных данных вместо переменных окружения.
- Обновляйте образы и зависимости — следите за CVE и выпусками безопасности.
- Ограничьте привилегии пользователя MySQL: не используйте root для повседневных операций.
Короткая модель решения безопасности: минимальные права, защищённая сеть, шифрование трафика.
Контрольный список перед продом
- PHPMyAdmin не доступен напрямую в интернет без прокси.
- Включён HTTPS и валидный сертификат.
- Используются Docker secrets для паролей.
- Пользователь MySQL имеет минимальные привилегии.
- Образы регулярно обновляются и перезапускаются.
- Логи централизованы и мониторятся.
Критерии приёмки
- PHPMyAdmin доступен по HTTPS на ожидаемом домене/порте.
- Можно подключиться к указанной базе данных под рабочей учётной записью.
- Конфигурационная база
phpmyadminсоздана и расширенные функции доступны. - Пароли не хардкодятся в Dockerfile; используются secrets или безопасное хранилище.
- Доступ ограничен IP/прокси согласно требованиям безопасности.
Методология развёртывания (микро-процесс)
- Подготовьте секреты (пароли) в Docker secrets или секретном хранилище.
- Создайте Docker-сеть для сервисов.
- Разверните MySQL с томом для данных.
- Разверните PHPMyAdmin с PMA_HOST, указывающим на MySQL-сервис.
- Настройте обратный прокси с HTTPS и базовой авторизацией.
- Проверьте создание базы
phpmyadminи корректность привилегий. - Включите мониторинг и резервное копирование данных.
Ролевые чек-листы
Администратор Docker:
- Создать сеть и тома
- Установить секреты
- Настроить обновления образов
DBA:
- Создать пользователя с минимальными правами
- Проверить создание базы
phpmyadmin - Настроить бэкапы баз данных
Сетевой инженер / DevOps:
- Настроить обратный прокси и TLS
- Ограничить доступ правилами firewall
- Настроить логирование и мониторинг
Типичные ошибки и способы решения
- Проблема: «Cannot connect to MySQL» — Проверьте, что
PMA_HOSTуказывает на доступный адрес/имя, и что контейнер в той же сети. Убедитесь, что порт открыт. - Проблема: «Some extended features have been deactivated» — создайте базу
phpmyadminпод пользователем с правами на создание баз. - Проблема: секреты не читаются — проверьте, что путь, указанный в переменной
_FILE, существует внутри контейнера и содержит нужное значение.
Решение для сложных сценариев
Когда база данных находится в приватной сети или управляется облачным сервисом (RDS/Aurora и т. п.), используйте безопасный канал (VPN/SSH Tunnel) или размещайте PHPMyAdmin в той же частной сети. Для облачных сервисов соблюдайте рекомендации провайдера по безопасности.
Decision flowchart (Mermaid)
flowchart TD
A[Нужен доступ к базе] --> B{База в Docker?}
B -- Да --> C[Создать сеть Docker и запустить PHPMyAdmin в ней]
B -- Нет --> D{База доступна по адресу/порту}
D -- Да --> E[Запустить PHPMyAdmin с PMA_HOST и PMA_PORT]
D -- Нет --> F[Настроить порт/туннель или сетевой маршрут]
C --> G{Публичный доступ?}
E --> G
G -- Да --> H[Настроить обратный прокси + TLS + аутентификацию]
G -- Нет --> I[Ограничить доступ через firewall]
H --> J[Проверка и мониторинг]
I --> JФакто-бокс
- Образ: phpmyadmin:latest
- Стандартный порт HTTP: 80 (обычно проброшен как 8080:80)
- MySQL по умолчанию: порт 3306
- Конфигурационный файл внутри контейнера: /etc/phpmyadmin/config.user.inc.php
- Переменные окружения для подключения: PMA_HOST, PMA_PORT, PMA_ARBITRARY
Совместимость и миграция
- Если вы мигрируете с «bare-metal» установки на Docker: перенесите конфигурацию в config.user.inc.php и подключите том с бэкапами.
- Проверьте версии PHP и расширений, если у вас есть кастомные плагины — убедитесь, что образ их поддерживает.
Резюме
PHPMyAdmin в Docker — быстрый и удобный способ получить веб-интерфейс для управления MySQL/MariaDB без установки Apache/PHP на хост. Выбирайте режим подключения с учётом безопасности: для продовых сред лучше явно задавать хосты, использовать Docker secrets, ограничивать доступ через прокси и HTTPS.
Внедрите стандартную процедуру развёртывания через Docker Compose, автоматизируйте обновления образов и следуйте правилам безопасности, чтобы не подвергать базы данных внешнему риску.
Важно: документация проекта содержит подробные инструкции и раздел по безопасности — обязательно изучите её перед запуском в продакшен.
Похожие материалы
Отключить автовход в Windows 10/11
Sentry и GitLab для React: настройка и практика
Exim: направить входящую почту в скрипт
Удаление Git или смена удалённого репозитория
Автообновление страниц в браузере — расширения и советы