Служба mysql связывает порт сервера mysql с 3306 до 3306 хост-машины.Таким образом, это нормально, что вы можете подключиться с хоста.
Изнутри контейнера php, localhost
ссылается на этот конкретный контейнер, как сказал @David Maze в комментариях.
Поскольку вы используетеdocker-compose
контейнеры находятся в одной сети, поэтому вы должны использовать имя службы для подключения к серверу mysql.
Попробуйте это из php контейнера:
mycli -h mysql -P 3306 -u root