dza*_*ang 5 python bash shell stdout docker
我有一个 docker 容器,它执行一组操作并将输出打印到终端。在使用 Docker SDK for python 时,我无法弄清楚如何获取终端输出。
这是我想要实现的一个例子。假设我有一个包含以下文件的文件夹:
Project
Dockerfile
now.py
dockerpy.py
Run Code Online (Sandbox Code Playgroud)
哪里now.py是一个简单的脚本,它每秒打印当前时间十秒钟:
# now.py
from datetime import datetime
import time
for _ in range(10):
print(datetime.now())
time.sleep(1)
Run Code Online (Sandbox Code Playgroud)
并Dockerfile为运行脚本的容器构建映像:
FROM python
ADD . /code
ENTRYPOINT ["python", "/code/now.py"]
Run Code Online (Sandbox Code Playgroud)
使用 构建映像后docker build -t dpytest .,我运行dockerpy.py以启动容器:
# dockerpy.py
import docker
from datetime import datetime
if __name__ == '__main__':
client = docker.from_env()
print('{} - Starting\n'.format(datetime.now()))
container = client.containers.run("dpytest", detach=True)
for line in container.logs(stream=True):
print(line.strip())
print('\n{} - Completed\n'.format(datetime.now()))
Run Code Online (Sandbox Code Playgroud)
容器启动、执行并在 10 秒后将整个输出打印到终端会话:
$ python dockerpy.py
2019-03-18 12:18:43.508384 - Starting
b'2019-03-18 11:18:44.344516'
b'2019-03-18 11:18:45.345600'
b'2019-03-18 11:18:46.346731'
b'2019-03-18 11:18:47.347814'
b'2019-03-18 11:18:48.348900'
b'2019-03-18 11:18:49.350057'
b'2019-03-18 11:18:50.351209'
b'2019-03-18 11:18:51.352425'
b'2019-03-18 11:18:52.353539'
b'2019-03-18 11:18:53.354598'
2019-03-18 12:18:54.471805 - Completed
Run Code Online (Sandbox Code Playgroud)
我想要实现的是将容器输出附加到我的 shell 并在进程发生时获取打印,而不是在容器退出时获取打印。
| 归档时间: |
|
| 查看次数: |
2168 次 |
| 最近记录: |