我想从 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 命令...”
但是如果运行命令我会得到预期的结果
block 引用>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/