Выполнение сценариев 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'

попробуй:

docker exec <container_id> '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)"