Дело в том, что у каждого контейнера внутри свой loopback интерфейс с IP 127.0.0.1
Есть два пути, чтобы добиться желаемого.
Первый, убрать изоляцию с сети (
network_mode: host), тогда всё просто заработает, но так делать не надо потому что на проде тебе никто не позволит так делать.
Второй, надо заставить MySQL слушать либо на 0.0.0.0 (то есть на всех интерфейсах) и подключаться к ней из контейнера по IP шлюза (его можно посмотреть в выводе
docker inspect <container_name>
), либо заставить MySQL слушать именно на одном IP который является шлюзом для контейнера.