需要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'])
答案 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)
您的代码有些错误:
container_id:"/tmp"
不是有效的python语法docker cp
在子进程中无效命令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"])