验证应用程序是否在Docker

时间:2018-03-12 11:43:52

标签: docker cron dockerfile

我是docker实现的初学者,我创建了一个简单的“hello world”示例来测试我的docker,

 package com.example.demo;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.web.support.SpringBootServletInitializer;

@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
public class DockerTestingApplication extends SpringBootServletInitializer{

    public static void main(String[] args) {
        SpringApplication.run(DockerTestingApplication.class, args);
        String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Date());
        Logger logger = LoggerFactory.getLogger(DockerTestingApplication.class);
        logger.info(timeStamp +" :: Docker File is running Ok");
    }
}

当我在本地运行应用程序时,它工作正常,并将其完美地记录在日志文件中。

现在,问题是当我尝试在docker中的应用程序中运行时, 添加了cron选项卡。 在控制台上,应用程序(jar)被执行,因为我认为它是因为我已经给出了5分钟的cron时间段,并且在每5分钟之后它执行jar。 但我将如何验证其工作原理?

  1. 在哪里记录申请流程的日志?
  2. 如何提供日志的位置?
  3. DOCKER文件: -

    FROM openjdk:8-jre-alpine
    RUN apk add --no-cache bash
    ENV LOG_LOCATION /var/log/applogs
    RUN rm -rf /var/cache/apk/* \
        && mkdir /etc/test && mkdir /var/log/applogs
    ADD crontab /etc/cron.d/crontab
    ADD jar/ /etc/test/
    CMD chmod +777 /var/log/applogs
    RUN crontab /etc/cron.d/crontab
    CMD ["/usr/sbin/crond", "-f", "-d", "0"]
    

    CRONTAB: -

    #!/bin/bash
    */5 * * * * root java -Dlogfile.location="/var/log/applogs/Log.log" -jar /etc/test/DockerTesting-0.0.1-SNAPSHOT.jar
    # An empty line is required at the end of this file for a valid cron file.
    

    我甚至登录了docker容器并到达了我给出的日志位置,但它没有创建log.log文件,我搜索了很多但没有达到解决方案。

    希望找到解决方案。

1 个答案:

答案 0 :(得分:0)

Docker将始终将STDOUT重定向到容器日志位置。简单来说,如果你想阅读日志,你可以通过运行命令来获取它们。

docker logs $container_id_or_container_name

此外,可以从此命令

中检索实际位置
docker inspect --format='{{.LogPath}}' $ontainer_id_or_container_name

此处有更多信息stackoverflow question