【问题标题】:Ubuntu docker container with upstart and syslog带有新贵和系统日志的 Ubuntu docker 容器
【发布时间】:2016-01-20 03:53:36
【问题描述】:

四处搜索之后,我仍然对您是否可以拥有一个运行 Ubuntu 的 docker 容器 以及一个工作的 init 系统(新贵)syslog 感到困惑强>,还是不强。

我知道 docker 容器用于运行单个进程而不是完整的操作系统,但我的用例是在各种 linux 发行版上测试守护进程,确保守护进程在崩溃等情况下成功启动、停止和重新启动等,使用记录到系统日志。因此,我正在尝试决定是否可以为此使用 docker 容器,或者使用Vagrant 会更好。

我发现的一些资源令人困惑:

  • 容器无法连接到 Upstart docker/docker#1024

    因为 Docker 用自己的替换了默认的 /sbin/init,所以有 无法在 Docker 容器中运行 Upstart 初始化。

  • Using Supervisor with Docker

    传统上,Docker 容器在启动时会运行一个进程,例如 Apache 守护进程或 SSH 服务器守护进程。通常,尽管您想在一个容器中运行多个进程。有很多方法可以实现这一点,从使用简单的 Bash 脚本作为容器的 CMD 指令的值到安装进程管理工具。

所以基本上我最后需要的是能够运行:

$ initctl start <daemon>
$ initctl stop <daemon>

当然是在/etc/init/&lt;daemon&gt;.conf 创建必要的conf 文件后,并查看syslog 的日志。

【问题讨论】:

  • 看看 baseimage-docker github.com/phusion/baseimage-docker 它有一个初始化系统和一个系统日志
  • 是的,但它不是暴发户。我的守护进程将 upstart 检测为 init 系统,因为它是 Ubuntu 上的默认设置,因此它使用 initctl。这不适用于他们的自定义初始化系统。
  • 你有没有考虑过除了暴发户以外的初始化系统?我知道 phusion[1] 使用 ubuntu 作为其基础映像。它使用 runit[2]。还有其他的守护进程,比如 supervisor[3]。 [1]:github.com/phusion/baseimage-docker [2]:smarden.org/runit [3]:supervisord.org

标签: ubuntu docker init syslog upstart


【解决方案1】:

https://github.com/BITPlan/docker-stackoverflowanswers/tree/master/33233329 重复这些步骤

从 Dockerfile 开始

FROM ubuntu:14.04

构建它:

docker build -t bitplan/ubuntutest:0.1 .
Sending build context to Docker daemon 2.048 kB
Step 0 : FROM ubuntu:14.04
---> 0a17decee413
Successfully built 0a17decee413

运行它:

docker run -it bitplan/ubuntutest:0.1 /bin/bash

并检查正在运行的服务:

 root@50a738241d03:/# service --status-all
 [ ? ]  console-setup
 [ + ]  cron
 [ ? ]  killprocs
 [ ? ]  kmod
 [ ? ]  networking
 [ ? ]  ondemand
 [ - ]  procps
 [ ? ]  rc.local
 [ + ]  resolvconf
 [ - ]  rsyslog
 [ ? ]  sendsigs
 [ - ]  sudo
 [ - ]  udev
 [ ? ]  umountfs
 [ ? ]  umountnfs.sh
 [ ? ]  umountroot
 [ - ]  urandom

您可以看到在一个典型的基于操作系统的容器中运行着多个服务。如果你安装更多的东西,比如 apache、mysql 等,就会有更多的服务。

因此,如果您想开始更多这些,我建议您使用

服务启动 服务停止

你会发现例如在我们的 docker-mediawiki 图像的入口点中:

https://github.com/BITPlan/docker-mediawiki/blob/master/docker-entrypoint.sh

参见例如

service mysql start

在那里。

【讨论】:

  • 我不确定这如何回答我的问题。我知道你可以安装任何你想要的服务,但问题是你是否可以让新贵在 Ubuntu 容器中工作。基本上是为了能够复制标准的 Ubuntu 机器。
  • 请参阅askubuntu.com/questions/353382/service-vs-initctl 了解差异。我自己没有使用 initctl - 因为服务是较旧的概念,我假设如果服务方法有效(它在我的环境中有效),那么 initctl 方法也应该有效
  • 并非如此。在默认的 ubuntu:14.04 容器中,/sbin/initctl 具有 exit 0
  • 我的意思是它包含的一切。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-03
  • 2021-12-29
  • 2019-09-08
  • 1970-01-01
  • 1970-01-01
  • 2020-12-02
相关资源
最近更新 更多