Tag: subprocess

当通过Node.jssubprocess同步执行时,Docker拉不能实时下载大小/总大小

当我运行docker pull my-image从我的terminaldocker pull my-image这是我的输出如何。 59e69571f6c7: Pull complete 43da27f69c98: Pull complete d22174e9eddd: Pull complete cc0ac48a6d21: Downloading 312.3 MB/2.888 GB b47aa969d5dc: Download complete 当我运行一个Node.js代码 const { exec } = require('child_process'); exec('docker pull my-image', (error, stdout, stderr) => { if (error) { console.error('exec error: ${error}'); return; } console.log('stdout: ${stdout}'); console.log('stderr: ${stderr}'); }); 我的输出看起来像这样。 c49bda5ed612: Waiting 43da27f69c98: Verifying […]

如何在Docker容器中forksubprocess

我试图用execPath,execArgv选项来做到这一点 。 subprocess正在运行,但是我有一个subprocess的问题。 process.send()函数没有被定义,我不确定,但它可能是一个与容器内的孩子的init IPC通道的问题。 parent.js const fork = require('child_process').fork; const child = fork('child.js', { execPath: 'docker', execArgv: ['run', '-v', 'C:/Users/MIS/Desktop/ChildProcess/:/usr/src/app', '-w', '/usr/src/app','–ipc=host','-it','–rm', 'node:6.10.3-alpine', 'node'], stdio: [0, 1, 2, 'ipc'] }); const data = { age: 15 }; child.on('message', (m) => { console.log('PARENT got message:', m); }); child.send(data); Child.js process.on('message', (m) => { m.age = […]

解决:在dockerized节点应用程序中产生一个复杂的进程(sipp)

我正在运行一个dockerized节点的应用程序。 它有多个subprocess,工作正常,一个进程意外返回“1”! 这里是从我的server.js线: var child = child_process.spawnSync("./sipp", ["-sf","./call_helloworld.xml", "127.0.0.1:5070","-p","1236","-m","1","-trace_screen"], {cwd:"/root/UT"}); logger.info(child.status); 当我进入容器,并从当前工作目录下面的bash运行完全相同的行,它工作正常(返回0) node >require('child_process').spawnSync("./sipp", ["-sf","./call_helloworld.xml", "127.0.0.1:5070","-p","1236","-m","1","-trace_screen"], {cwd:"/root/UT"}); 我很确定sipp调用甚至不是以第一个命令开始的。 docker文件的最后一行是 WORKDIR /root/config #this is the location of my server app ENTRYPOINT ["node", "server.js"] 我知道这个问题是有点特定的,但任何在debuggingspawnSync的一般帮助表示赞赏。 ====================================== 更新:进一步debugging后,我发现spawnSync返回“错误打开terminal:未知”。 解决方法是添加环境variables“export TERM = xterm”。 https://nology.de/docker-error-opening-terminal-unknown.html

如何捕捉与Python的subprocess.call错误?

我试图下载一个特定的Docker镜像,用户将在其中input一个版本。 但是,如果版本不存在,Docker将会抛出一个错误。 我使用subprocess.call从Python 3pipe道到terminal。 示例代码: from subprocess import call containerName = input("Enter Docker container name: ") swVersion = input("Enter software version: ") call(["docker", "run", "–name", "{}".format(containerName), "–detach", "–publish", "8080:8080", "user/software:{}".format(swVersion)]) 如果找不到版本,docker将在terminal输出: docker: Error response from daemon: manifest for user/software:8712378 not found. 如何在Python脚本中捕获这个错误? 有些东西是: try: call(["docker", "run", "–name", "{}".format(containerName), "–detach", "–publish", "8080:8080", "user/software:{}".format(swVersion)]) except: # How […]

使用$ PWD和subprocess.Popen()导致Docker错误,从shell起作用

我想要使​​用subprocessPopen从python运行一个docker命令: proc = subprocess.Popen( shlex.split(r'docker run -v $PWD:/data blang/latex pdflatex main.tex'), cwd=temp_dir, shell=False, stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE) proc.communicate() 虽然从terminal的命令完美的工作,这返回: (b'',b'docker:来自守护进程的错误响应:创build$ PWD:“$ PWD”包含本地卷名的无效字符,只有“[a-zA-Z0-9] [a-zA-Z0-9_ .-]“是允许的。\ n请参阅”docker run –help \“。\ n')

是否有任何简单的python软件包可以运行预构build的docker镜像

我知道有大量的文章,博客和关于在Docker容器中运行python应用程序的SO问题。 但是我正在寻找相反的信息。 我有一个分布式的应用程序与很多独立的组件,我已经把每个这些组件在docker容器(S),我可以通过手动运行 docker run -d <MY_IMAGE_ID> mycommand.py 但是我试图从我的“主”主机上的python脚本中find一种运行这些容器化应用程序的方式(pythonic,面向对象的方式)。 我显然可以将命令行调用包装到subprocess.Popen() ,但是我正在查看是否有更多的pipe理存在。 我已经看到docker-py,但我不确定这是否是我需要的或不是; 我找不到一个方法来使用它来简单地运行一个容器,捕获输出等。 如果有人有这方面的经验,我将不胜感激任何指针。

在执行docker exec命令时,执行python脚本时挂起

我是Docker的新手。 我有一个python脚本,它可以: 通过以下方式启动docker集装箱: call(["sudo docker run -i -t -d test /bin/sh"],shell=True) 通过以下命令删除容器内部的软链接: call("sudo docker exec -i "+ tag1 +" rm /usr/local/lib/boost_logger",shell=True) 其中tag1是我的docker容器id 我从我的centos文件夹复制新的文件到docker实例通过: call("sudo tar -cv * | sudo docker exec -i "+ tag1 +" tar x -C /usr/local/lib/", shell=True) 我使用以下方法重新创build2个软链接: call("sudo docker exec -i "+ tag1 +" ln -s /usr/local/lib/libboost_logger.so /usr/local/lib/boost_logger",shell=True) call("sudo docker exec […]

Docker通过subprocess运行

好吧,我通过subprocess调用(在GUI中)发射一些docker运行命令。 这个调用看起来像这样: import subprocess a = subprocess.run(args, stdout=subprocess.PIPE) output = a.stdout.decode().split("\n") 生活在docker集装箱的过程将login到标准输出,我想我可以然后获取我的日志消息。 我正在使用docker run -a命令 /usr/bin/docker run –rm -a stdout xxxx/pyrisk:latest python prices.py

在docker容器中调用pythonsubprocess时出错

我想在Python 2.7中调用一个subprocess。 这个subprocess执行一个JAVA jar文件并读取输出。 我在docker集装箱中使用Django。 我正在调用一个函数: def call_exec(lang) curdir = curdir = 'ht/exec_folder' tmp_files_dir = 'ht/temp_files' script_args = ["java","-jar",'/'+curdir + "/executable.jar", "-l",lang,"-s",'/'+tmp_files_dir] output = subprocess.check_output(script_args) return output 这里,ht是我的Django应用程序中的一个文件夹。 我正在尝试使用executable.jar并读取输出。 其他参数是为了运行可执行文件。 以下是产生的错误: django_1 | similarity = call_exec('english') django_1 | File "/app/langswipe/submissions/check_view.py", line 80, in call_exec django_1 | output = subprocess.check_output(script_args) django_1 | File "/usr/local/lib/python2.7/subprocess.py", line 567, […]

从Python启动docker容器混淆了terminal设置

我从一个subprocess.Popen启动一个docker容器,它工作,但是当脚本返回时,我的shell的terminal设置是混乱的。 没有任何回音。 我可以在terminal上用tset修复这个问题,但是我不想要求这个。 有没有人在这里与docker工作,并已经看到并解决了这个问题? 以下是我如何启动容器: cmd = ['sudo', 'docker', 'run', '-t', '-i', 'elucidbio/capdata:v2', 'bash' ] p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 我已经尝试用无限循环replacebash,并使用nohup ,但同样的事情发生了。