Коротко — самая частая причина, почему MySQL из Docker не стартует в WSL: вы монтируете каталог данных из Windows (через /mnt/c/...) и MySQL ломается из‑за отсутствия unix‑прав/свойств файловой системы DrvFs. Решение — использовать docker volume или WSL (ext4) путь, плюс проверить права и логи контейнера.
Что сделать шаг за шагом
1) Проверить логи контейнера
- Посмотреть статус и логи:
docker ps -a
docker logs <container_name_or_id>
docker inspect --format='{{json .Mounts}}' <container>
Ищите ошибки вроде "InnoDB: Unable to lock ./ibdata1", "The server quit without updating PID file", или сообщения про права/ownership.
2) Если вы монтируете папку из Windows (например /mnt/c/…)
- НЕ монтируйте Windows‑файловую систему в /var/lib/mysql — MySQL часто не работает на DrvFs/9p (нет unix‑прав, symlink, атрибутов).
- Вместо этого:
- Используйте docker volume (рекомендуется), либо
- Используйте путь в файловой системе WSL (например /home/you/project/mysql-data), НЕ /mnt/c/…
Пример безопасного запуска (docker volume):
docker run -d --name mysql \
-e MYSQL_ROOT_PASSWORD=secret \
-p 3306:3306 \
-v mysql_data:/var/lib/mysql \
mysql:8.0
Или docker‑compose (файл docker-compose.yml):
version: '3.8'
services:
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: mydb
MYSQL_USER: user
MYSQL_PASSWORD: pass
volumes:
- mysql_data:/var/lib/mysql
ports:
- "3306:3306"
volumes:
mysql_data:
3) Если уже есть volume/папка и MySQL жалуется на права
- Установите правильного владельца (в официальном образе mysql пользователь mysql обычно есть в контейнере):
docker run --rm -v mysql_data:/var/lib/mysql --entrypoint "" mysql:8.0 \
bash -c "chown -R mysql:mysql /var/lib/mysql || true"
Если вы используете bind‑mount в WSL (ext4), можно:
sudo chown -R 999:999 /home/you/project/mysql-data
(UID 999 — часто UID mysql в образе; безопаснее делать chown внутри контейнера как выше).
4) Убедитесь, что Docker в WSL запущен корректно
- Используете ли вы Docker Desktop с интеграцией WSL2? (Docker Desktop → Settings → Resources → WSL Integration)
- WSL должен быть v2 (wsl -l -v).
5) Если контейнер падает — соберите диагностические данные и пришлите их
- Выходы команд:
docker ps -a
docker logs <container>
docker inspect <container>
ls -la /путь/к/вашему/маунту (внутри WSL, если bind‑mount)
Я помогу по логам.
Типичные сообщения и что они значат
- "Can't create/write to file … permission denied" — проблема прав или используете Windows FS.
- "InnoDB: Unable to lock ./ibdata1" — другой mysql процесс или повреждённые файлы; возможно файлы созданы на Windows FS.
- "The server quit without updating PID file" — обычно следствие ошибок файловой системы/прав.
Если хотите — пришлите:
- docker run/compose команду, которую вы используете,
- вывод docker logs для упавшего контейнера,
- путь к тому каталогу, который монтируете (в WSL: /home/... или /mnt/c/...).
Помогу предложить точное решение по ошибкам из логов.