【问题标题】:Docker busybox exit immediatelyDockerbusybox 立即退出
【发布时间】:2015-11-08 11:07:33
【问题描述】:

我正在尝试创建一个busybox docker 映像来保存我的rails 应用程序的日志,包括nginx 和独角兽日志。为了创建该容器,我使用以下命令:

docker run --name app-logs -v /logs busybox /bin/sh

但是创建的容器会立即退出,代码为 0:

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS                              NAMES
75e2f2efdc77        busybox             "/bin/sh"                6 seconds ago       Exited (0) 4 seconds ago                                      app-logs

命令 docker logs 没有给出任何输出,我无法找出问题所在。

提前致谢。

【问题讨论】:

    标签: ruby-on-rails docker busybox


    【解决方案1】:

    如果你想使用 shell,你需要run docker in the foreground

    -t=false        : Allocate a pseudo-tty
    -i=false        : Keep STDIN open even if not attached
    

    所以

    docker run -ti --name app-logs -v /logs busybox /bin/sh
    

    数据 + 卷

    如果您想保留所谓的data volume container,您需要至少有一个容器引用该卷。没有必要让它继续运行。已退出的容器仍保存在您的系统中 (docker ps -a)。

    docker run --name app-logs -v /logs busybox /bin/true
    

    然后你可以从你的应用容器挂载你的数据容器卷

     docker run -d --volumes-from app-logs --name app busybox ruby yourapp.rb
    

    实现相同的另一种方法是使用主机通过在任何地方安装主机卷来存储数据

    docker run --name app -v /logs:/logs busybox ruby yourapp.rb
    

    我发现当 docker 存储出现问题时,将数据存储在 docker 之外的主机上是有益的。我可以清除所有 docker 数据并重新开始,轻松保留和重新挂载存储在主机上的所有有状态/应用程序数据。

    【讨论】:

    • 我想让它保持打开状态,但不要在前台运行它。有可能做到吗?如果没有,我怎样才能找到它立即关闭的原因?
    • 那时你可能不想运行sh。您是否使用某种类型的 syslog 进程来收集日志?
    • 我已将 nginx、unicorn 和 rails 配置为使用 /logs,如果出现任何问题,我想保留这些日志。为此,我考虑使用busybox 来保证它的安全。不需要为此运行 sh 吗?
    • 哦,我明白了。您不需要正在运行的容器。我已经包含了一些卷注释。
    猜你喜欢
    • 1970-01-01
    • 2017-09-30
    • 2017-04-12
    • 2012-07-22
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多