2017-01-30 3 views
0

У меня есть контейнер для докеров mysql, и он работает. Я могу войти в него и увидеть подсказку mysql. Я не хочу монтировать внешнее хранилище. Каждый раз, когда я запускаю этот контейнер, я хочу выполнить скрипт test.sql из своей файловой системы, чтобы создать БД и сделать несколько таких действий. Когда я запускаю скрипт, который существует в моем текущем рабочем каталоге, он жалуется. Я знаю, что это тривиально, но я не могу уловить проблему.Выполнение mysql script docker

/microservices/mysqlcontainer] Докер Exec 3a21e5e3669d/бен/ш -c 'MySQL -u корень -ppwd < ./test.sql' /бен/ш: ./test.sql: Нет такого файла или каталога

+0

Является ли test.sql внутри изображения/контейнера? 'docker exec 3a21e5e3669d ls -l test.sql' – BMitch

+0

Нет, это снаружи, и я также думаю, что это может быть проблемой, но некоторые форумы предложили этот синтаксис работать. Я смог подключиться к этому контейнеру и получить подсказку mysql легко, но вот как это: docker exec -it mysqltest mysql -u root -ppwd – curiousengineer

ответ

3

Поскольку ваш скрипт находится за пределами контейнера, нет необходимости перехватывать перенаправление ввода оболочки. Вы должны иметь возможность запускать следующее:

docker exec -i 3a21e5e3669d mysql -u root -ppwd <./test.sql 
+0

спасибо, я понимаю понятия Linux перенаправления, трубы, stdout и т. Д. Однако, вы разрабатываете немного больше о «не нужно ловить ...». Ваше предложение действительно работало кстати. – curiousengineer

+1

«/ bin/sh -c» mysql .... BMitch

+0

спасибо! Пробовали док-лизировать мои микросервисы, которые я прототипирую, используя библиотеки spring boot + netflix. Это помогает. Мне нужен контейнер sql для хранения информации аутентификации для токенов json web. Теперь я могу двигаться вперед, так как моя служба auth может разговаривать с БД и каждый раз, когда я загружаю контейнер mysql, db создается со сценарием. Я, вероятно, буду самостоятельно читать, как смонтировать внешний файл sys, но это не является для меня приоритетом. – curiousengineer