python - 如何从 python 运行 docker 命令?

标签 python docker

我想从 python 运行一组 docker 命令。 我尝试创建如下脚本,并使用 paramiko ssh_client 从 python 运行脚本以连接到运行 docker 的计算机:

#!/bin/bash

   # Get container ID
   container_id="$(docker ps | grep hello | awk '{print $1}')"

   docker exec -it $container_id sh -c "cd /var/opt/bin/ && echo $1 && 
   echo $PWD && ./test.sh -q $1"

但是docker exec ...永远不会被执行。

所以我尝试直接在运行 docker 的机器中运行下面的 python 脚本: 导入子流程

docker_run = "docker exec 7f34a9c1b78f /bin/bash -c \"cd 
/var/opt/bin/ && ls -a\"".split()
subprocess.call(docker_run, shell=True)

我收到一条消息:“用法:docker 命令...”

但是如果运行命令我会得到预期的结果

docker exec 7f34a9c1b78f /bin/bash -c "cd /var/opt/bin/ && ls -a" directly in the machine

如何从 python 脚本运行多个 docker 命令?谢谢!

最佳答案

您在调用 subprocess.call 时出错。 subprocess.call 需要一个带有一系列参数的命令。您已经给了它一个参数列表。

这段代码:

docker_run = "docker exec 7f34a9c1b78f /bin/bash -c \"cd 
/var/opt/bin/ && ls -a\"".split()
subprocess.call(docker_run, shell=True)

运行这个:

subprocess.call([
   'docker', 'exec', '7f34a9c1b78f', '/bin/bash', '-c', 
   '"cd', '/var/opt/bin/', '&&', 'ls', '-a"'
 ], shell=True)

相反,我相信您想要:

subprocess.call([
   'docker', 'exec', '7f34a9c1b78f', '/bin/bash', '-c', 
   '"cd /var/opt/bin/ && ls -a"' # Notice how this is only one argument.
 ], shell=True)

您可能需要调整第二个调用。我怀疑您不需要引号('cd/var/opt/bin/&& ls -a' 可能会代替 '"cd/var/opt/bin/&& ls -a"'),但我还没有测试过。

关于python - 如何从 python 运行 docker 命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52262351/

相关文章:

github - Dockerfile:跳过私钥的密码

python - 在 DRF 中显示 ForeignKey 属性

python - 需要帮助读取 .cfg 文件

python - Pandas DataFrame 中连续的 NaN 大于阈值

docker - Ansible服务重启不起作用

docker - 为什么无法通过名称或 VIP 访问 Docker Swarm 中的服务?

docker - 在docker内部配置cassandra.yaml以进行密码验证

ruby-on-rails - Rails 不记录请求

Python:3.7-stretch unixodbc:冲突:unixodbc-bin

python - 我可以让 Python 调试器 pdb 输出颜色吗?