【发布时间】:2019-07-11 20:58:54
【问题描述】:
我有一个 Docker 组合文件,它启动一个数据库、网络服务器和一个工作器。我们的用户可能需要运行额外的工作人员,而我正在工作(使用“...up --scale worker=x”)。用户可能还想停止特定的工作人员。这就是我遇到麻烦的地方。在命令行上,我可以使用“docker stop worker_name”,这可以正常工作,但当我使用子进程从 Python 调用它时就不行了。我已经看到使用 docker-compose stop 的参考,但是 docker-compose 不是通过您的 yml 文件进行的吗?你怎么能用它来停止一个容器?我们在 Ubuntu 18.04 上使用 Python 3.7.1。 Docker 版本是 18.06。
这是一个来自 Python 的用于停止 worker 的 sn-p。
kwargs - { 'shell': True,
'stdout': subprocess.PIPE,
'stderr': subprocess.PIPE,
'universal_newlines': True
}
worker_name = 'worker_1'
cmd = f'docker stop {worker_name}'
proc = subprocess.Popen(cmd, **kwargs)
out, err = proc.communicate()
self.logger.info(f'out = {out}')
self.logger.info(f'err = {err}')
【问题讨论】:
-
为什么不分享你的python代码呢?没有理由
bash command有效,但python subprocess调用此命令无效。 -
@atline 查看我的补充。