Вот у вас же написано в описании сервиса web
links:
- db
####
Более правильно и наглядно было написать
links:
- db:db
)
####
это значит кто контейнер сервиса "db" для сервиса "web" будет доступен по адресу db
localhost внутри контейнера укажет на сам этот контейнер, айпи хоста на сам хост. Конечно по айпи хоста можно добраться до базы, поскольку проброшен порт (что и делает ваш mysql workbench), но видимо докер добавляет это правило iptables только для внешних сетей.