Сценарий
У меня есть docker контейнер, который просто существует для тестирования. Идея состоит в том, чтобы создать изображение из файла dockerfile, создать контейнер из изображения, который анализирует файл sql БД, а затем запустить его, пока я тестирую новую функцию. После этого (или ранее, когда тестовая БД была повреждена из-за какой-то ошибки), я останавливаю контейнер и затем удаляю его вместе с его изображением. В качестве последнего шага я запускаю docker volume prune -f
, чтобы очистить все.
Таким образом, я могу просто развиваться, не заботясь о том, повлияют ли мои изменения на мой локальный БД или нет, потому что чистый - всего лишь одним нажатием кнопки.
Это хорошо работает до тех пор, пока я использую меньшую тестовую БД (ее размер составляет от 12 до 13 МБ). Как только я начинаю использовать больший (примерно 300 МБ), производительность становится настолько плохой, что мой веб-интерфейс регулярно сообщает об исключениях тайм-аута, потому что бэкэнд никогда не доставляет данные.
Как примечание: я работаю на windows машине.
Исследования
- https://yktoo.com/en/blog/post/2018/07/02-slow-connection-to-mysql-in-docker/
- https://forums.docker.com/t/mysql-slow-performance-in-docker/37179/19
- https://docs.docker.com/engine/reference/commandline/run/
- https://docs.docker.com/engine/reference/builder/#arg
Вопрос
Первый Источник утверждает, что мне, возможно, придется добавить --skip-name-resolve
в качестве аргумента. В качестве примера она показывает docker run -e MYSQL_ROOT_PASSWORD=secret mysql:5.7.16 --skip-name-resolve
.
Теперь я использую dockerfile и, хотя смотрю на источники 3 и 4 дольше, чем хотелось бы признать, я просто не могу понять, как измените мой dockerfile, чтобы изображение получало `--skip-name-resol.
Итак, как do Я добавляю этот аргумент, чтобы мой dockerfile знал, что он применяется к mysql DB?
Дубликат
Я нашел этот вопрос, но он касается того, как передавать переменные ENV при использовании docker run: передавать аргументы из docker run to dockerfile