我尝试实现的是在容器中调用mysqldump并将数据库转储到容器自己的目录中.
首先我尝试下面的命令:
$docker exec container-name MysqLdump [options] database | xz > database.sql.xz
这不起作用,所以我尝试另一个是:
$docker exec container-name bash -c 'MysqLdump [options] database | xz > database.sql.xz'
这次它奏效了.
但那真的很蹩脚.
然后我尝试使用docker-py这次cmd选项看起来像这样:
cmd=['bash','-c','MysqLdump [options] database | xz > database.sql.xz']
记录器事件如下:
level="info" msg="-job log(exec_start: bash -c MysqLdump [options] database | xz > database.sql.xz,fe58e681fec194cde23b9b31e698446b2f9d946fe0c0f2e39c66d6fe68185442,MysqL:latest) = OK (0)"
我的问题:
存档我的目标有更优雅的方式吗?
你几乎就在那里,你只需要添加-i标志来使管道工作:
-i,--interactive Keep STDIN open even if not attached
docker exec -i container-name MysqLdump [options] database > database.sql.xz
我通过文件重定向替换了管道,但它对管道的作用相同.只要确保不使用-t选项,因为这会破坏它.
额外:
docker exec -i container-name MysqL [options] database < database.sql.xz
这个小脚本将检测我是否在管道中运行MysqL:
#!/bin/bash
if [ -t 0 ]; then
docker exec -it container-name MysqL "$@"
else
docker exec -i container-name MysqL "$@"
fi