Два пути функционально идентичны: вы выполняете одинаковые команды SQL для одной и той же базы данных. Как правило, я бы рекомендовал избегать docker exec
, если есть другой способ сделать то, что вам нужно, особенно для взаимодействия с сетевым сервисом.
Для запуска клиента mysql
требуется установить обычные инструменты, необходимые для взаимодействия с базой данных, и после того, как вы это сделаете, вы можете сделать это как непривилегированный пользователь. Вы даже можете сделать это с другого хоста. Вы никогда не будете смущены тем, находится ли файл в пространстве файловой системы хоста или в пространстве файловой системы контейнера.
docker exec
требует привилегий корневого уровня на хосте (если вы можете docker exec
, тогда вы также можете docker run -v/:/host ...
и изменить что угодно на хосте) и, по сути, включает получение корневой оболочки на сервер базы данных. Ни один из них на самом деле не является лучшей практикой для обычных административных операций.