【问题标题】:Redirecting output of nohup in docker not working在docker中重定向nohup的输出不起作用
【发布时间】:2019-08-28 21:28:17
【问题描述】:

我必须在 docker 中运行一个烧瓶应用程序。应用程序在我运行 start.sh 时启动(详情如下),它使用 nohup 命令启动应用程序并将输出重定向到日志文件。

这在普通 Linux 系统(没有 docker)中运行良好,但是当我在 docker 容器中运行它时,日志文件没有显示任何输出。在 docker 容器中,生成大小为 0 的日志文件,并将日志输出转储到 nohup.out 文件中。

我不确定为什么输出被重定向到 nohup.out 而不是指定的日志文件,而它在我当前的 Linux 设置中运行良好。

start.sh:

nohup uwsgi --ini /home/myuser/myapp/play.ini &>> /home/myuser/myapp/logs/play.nohup.out &

Dockerfile:

#Download base image ubuntu 16.04
FROM ubuntu:16.04

RUN apt-get update
RUN apt-get install -y git-core
RUN apt-get install -y nginx
RUN apt-get install -y python

# get application code and install python packages
RUN git clone <..git directory...> /home/myuser/myapp
RUN pip install -r /home/myuser/myapp/requirements.txt

# Setup nginx
RUN cp /home/myuser/myapp/myapp.conf /etc/nginx/conf.d/myapp.conf

CMD sleep 600
EXPOSE 80

【问题讨论】:

  • 当你在 docker 的上下文中询问时分享你的 dockerfile,没有 dockerfile 很难提供帮助。

标签: docker nohup


【解决方案1】:

我在使用 cron 命令时遇到了类似的问题,我发现该命令是使用 shell 运行的,但是 shell 不支持 &amp;&gt;&gt;,因为它是一个 bash 功能。

我能够使用带有以下合成器的命令来克服这个问题:

command >> logfile.log 2>&1

您可以在此链接上找到更多信息https://www.brianstorti.com/understanding-shell-script-idiom-redirect/

【讨论】:

    【解决方案2】:

    您通常根本不会在 Docker 中使用 nohup。通常你想设置一些东西,以便你的容器运行它的主要工作作为前台进程。 (在图像中安装一堆东西,然后让它闲置 10 分钟然后退出,这并没有什么意义。)

    您应该将 Dockerfile 的最后一行更改为

    CMD uwsgi --ini /home/myuser/myapp/play.ini
    

    如果你docker run 生成的图像没有-d 标志,它会将其输出打印到标准输出;如果您确实使用了-d,您可以稍后使用docker logs 检索它。

    【讨论】:

    • 是的,我同意这一点。但是如果我必须在启动时启动多个应用程序怎么办?
    • 通常你会在多个单独的容器中运行它们。
    猜你喜欢
    • 2012-08-22
    • 1970-01-01
    • 1970-01-01
    • 2011-11-28
    • 2012-09-29
    • 2016-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多