我是码头工人的新手,我在如何解决这个问题上遇到了麻烦。考虑这个超简化的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”后,容器立即退出。我的假设是使用卷,但不确定如何使其工作。
答案 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.
对于这两种方法,您需要在与应用程序不同的路径中编写日志。否则,应用程序代码将被共享卷覆盖。
docker create --name cli_test_instance cli_test run world
docker start cli_test_instance
docker cp cli_test_instance:log.log .