加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

来自命令行和python api的docker exec中的管道

发布时间:2020-12-16 03:33:46 所属栏目:安全 来源:网络整理
导读:我尝试实现的是在容器中调用mysqldump并将数据库转储到容器自己的目录中. 首先我尝试下面的命令: $docker exec container-name mysqldump [options] database | xz database.sql.xz 这不起作用,所以我尝试另一个是: $docker exec container-name bash -c '

我尝试实现的是在容器中调用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选项,因为这会破坏它.

额外:

要将sql转储导回到mysql:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读