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

python subprocess to copy files from host to container

在 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'])

这应该有效:

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 应该是一个参数,因为它们之间没有任何 space 。由于 container_id 在您的情况下是一个变量,因此不能将其与 :/tmp 放在一起。所以我创建了一个新变量 container_id_with_path,其中包含 :/tmp 路径。

运行 脚本给了我想要的结果。

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

您的代码存在一些错误:

  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"])