从docker中的进程运行返回日志文件

时间:2018-01-11 00:06:22

标签: python docker docker-volume

我是码头工人的新手,我在如何解决这个问题上遇到了麻烦。考虑这个超简化的cli工具,它在使用docker run运行时生成日志。

import click
import logging

logging.basicConfig(filename='log.log')
logger = logging.getLogger(__name__)

@click.group()
@click.version_option('1.0')
def cli():
    '''docker_cli with docker test'''


@cli.command('run')
@click.argument('name', default='my name')
def run(name):
    logger.info("running 'run' within docker")
    print('Hello {}'.format(name))

我的dockerfile如下:

FROM python:3.5-slim

LABEL maintainer="Boudewijn Aasman"
LABEL version="1.0"

ENV config production

RUN mkdir /docker_cli
COPY docker_cli ./docker_cli
COPY setup.py .

RUN python setup.py install

CMD ["cli", "run"]

如果我使用:

执行容器
docker run cli_test cli run world

如何检索在此过程中创建的日志文件?命令打印出“Hello world”后,容器立即退出。我的假设是使用卷,但不确定如何使其工作。

2 个答案:

答案 0 :(得分:0)

你试过这个吗?

docker logs cli_test
编辑:对不起,我第一次错过了这个,但是为了让它工作,你必须登录到STDERR,而不是日志文件。 (谢谢@Gonzalo Matheu  指出这一点。)为了使它工作,它应该像进行这个小的额外改变一样简单:

logging.basicConfig()  # note no file name

答案 1 :(得分:0)

您可以共享本地目录:

docker run -v full-path-your-local-dir:. cli_test cli run world

或创建泊坞窗卷

docker volume create cli_test_volume
docker run -v cli-test_volume:. cli_test cli run world
docker volume inspect cli_test_volume # will show where the volume is located.

对于这两种方法,您需要在与应用程序不同的路径中编写日志。否则,应用程序代码将被共享卷覆盖。

还有另一种选择,即使用createcp从容器中复制文件:

docker create --name cli_test_instance cli_test run world
docker start  cli_test_instance 
docker cp cli_test_instance:log.log .