python子进程可将文件从主机复制到容器

时间:2019-06-16 05:55:17

标签: python docker subprocess pipe cp

需要python子进程的帮助才能将文件从主机复制到容器 这是我尝试过的python代码

    import subprocess
    output=subprocess.check_output(['docker','ps'],
    universal_newlines=True)
    x=output.split('\n')
    for i in x:
        if i.__contains__("name_of_container"):
            container_id=i[:12]
    subprocess.call(["docker cp", "some_file.py", container_id:"/tmp"])
    subprocess.call(['docker','exec','-it', container_id,'bash'])

2 个答案:

答案 0 :(得分:0)

这应该有效:

import subprocess
output=subprocess.check_output(['docker','ps'],
universal_newlines=True)
x=output.split('\n')
for i in x:
  if i.__contains__("inspiring_sinoussi"):
      container_id=i[:12]
container_id_with_path=container_id+":/tmp"
subprocess.call(["docker", "cp", "/root/some_file.py", container_id_with_path])
subprocess.call(['docker','exec','-it', container_id,'bash'])

实际上,在subprocess调用中,所有参数都以逗号分隔。在您的情况下,container_id:/tmp应该是单个参数,因为它们之间没有任何空格。由于container_id是您的变量,因此无法与:/tmp放在一起。因此,我创建了一个新变量container_id_with_path,其中包含:/tmp路径。

运行脚本可以达到预期的效果。

$ python copy.py
/ # ls /tmp/
hsperfdata_root                          tomcat-docbase.1849924566121837123.9090
some_file.py  

答案 1 :(得分:0)

您的代码有些错误:

  1. container_id:"/tmp"不是有效的python语法
  2. docker cp在子进程中无效命令
  3. docker cp不在for循环中

所以,我想接下来是您的解决办法:

for i in x:
    if i.__contains__("name_of_container"):
        container_id = i[:12]
        subprocess.call(["docker", "cp", "some_file.py", container_id + ":/tmp"])