Передать содержимое файла в Docker Exec - PullRequest
0 голосов
/ 28 декабря 2018

Я учусь с помощью Docker-контейнеров и хочу передать файл .sql в базу данных с помощью Docker Exec.Как я могу это сделать?Я искал около часа и нашел это:

cat file.sql | docker exec -it mariadb sh -c 'mysql -u<user> -p<pass>'

или это

docker exec -it mariadb sh -c 'mysql -u<user> -p<pass> "$(< /path/file.sql)"'

, но ничего из этого не сработало.Я думаю, что есть проблема, что я передаю его в sh -c, и он пытается загрузить этот файл из контейнера.Как я могу это сделать?

1 Ответ

0 голосов
/ 28 декабря 2018

конечно, есть несколько способов сделать это;большинство ваших вызовов близки, но если вы выполните docker с -t, он выделит терминал для ввода / вывода, что будет мешать операциям потока.

Мой недавний вызов из истории оболочки был:

docker exec -i mysql mysql -t  < t.sql

в моем случае, конечно, mysql - это имя работающего контейнера.Вы заметите, что я не передаю -t docker exec - я, тем не менее, передаю его в программу командной строки mysql, которую я исполняю на хосте докера, так что не запутайтесьтам.

Оболочка, которая интерпретирует эту команду и выполняет Docker, также является той, которая открывает t.sql и перенаправляет этот дескриптор файла на стандартный вывод docker, поэтому t.sql находится в текущем рабочем каталогеоболочки хоста, а не оболочки контейнера.

Это было сказано, вот почему ваш не сработал.Во-первых, как я уже сказал, использование exec -it выделяет терминал, который мешает потоку stdin, настроенному оболочкой bash из cat.Во-вторых, вы действительно близки, но path / file.sql не было в образе докера, поэтому я предполагаю, что выбрано «нет такого файла или каталога», потому что file.sql находится на хосте, а неконтейнер, но в параметре -c он ссылается на выполнение контейнера sh.Конечно, для этого также необходимо удалить -t;ни в том, ни в другом случае не нужно выделять терминал (у вас его уже есть, и он уже будет stdout для выполнения докера, поскольку он унаследует не перенаправленный stdout оболочки).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...