Выполнение сценариев SQL в контейнере docker
у меня есть контейнер docker под управлением mysql, и я хочу нажать.sql-файл в контейнер, а затем mysql выполняет команды в нем. Первый шаг довольно прост:
docker cp ./dummy.sql <container_id>:/
оттуда я пытаюсь запустить mysql из командной строки и указать его на файл, который я только что толкнул в контейнер.
docker exec <container_id> mysql -u root -ppassword < /dummy.sql
эта команда, похоже, пытается использовать /sample.sql как stdin локально, а не на контейнере. Я также попытался обернуть цитаты вокруг всего после идентификатора контейнера, который также, кажется, не работает.
Я также попытался нажать a .sh-файл с командой в нем в контейнер docker, а затем просто выполняет это, но это менее идеально и также не работает. Есть советы?
3 ответов
Если вы собираетесь выполнять перенаправление каналов в своей команде, передайте его как строку в /bin/sh
:
docker exec <container_id> /bin/sh -c 'mysql -u root -ppassword </dummy.sql'
сначала не нужно копировать скрипт. После борьбы за запуск собственного скрипта мне удалось выполнить его на linux, используя:
docker exec -it <container_name> mysql -u root -ppassword -e "Use mydb; $(cat /path/to/script.sql)"
или если директива Use db содержится внутри скрипта:
docker exec -it <container_name> mysql -u root -ppassword -e "$(cat /path/to/script.sql)"