【问题标题】:Upstart script to run container won't manage lifecycle运行容器的新贵脚本不会管理生命周期
【发布时间】:2014-07-19 21:22:50
【问题描述】:

我有一个暴发户脚本(比如/etc/init/dtest.conf)

start on runlevel [2345]
stop on runlevel [!2345]
respawn
script
  DID=$(docker.io run -d ubuntu /bin/bash -c "echo Starting;sleep 20;echo Stopping")
  docker.io attach $DID
end script

当发出start dtest 时,新贵日志显示“正在启动...停止”的正确循环永远。

但是,如果我发出stop dtest,那么它似乎可以正常退出,但容器将在剩余的睡眠时间内运行(如每秒运行docker.io ps 所证明的那样)。

难道不应该有一种简单的方法可以在带有 upstart 的容器中运行 docker 映像并在那里管理其生命周期吗?

我的理想脚本应该是这样的:

start on runlevel [2345]
stop on runlevel [!2345]
respawn
exec docker.io run -d ubuntu /bin/bash -c "echo Starting;sleep 20;echo Stopping"

环境:这是在 AWS 上,在 T2.micro 中使用 Ubuntu 14.04,仅安装了 apt-get install -y docker.io

【问题讨论】:

    标签: docker upstart


    【解决方案1】:

    您应该通过运行以下命令来创建一个命名容器:

    docker run --name dtest ubuntu /bin/bash -c "echo Starting;sleep 20;echo Stopping"
    

    然后创建以下 upstart 脚本(注意 -a 标志),它将按照您的预期管理此容器的生命周期

    start on runlevel [2345]
    stop on runlevel [!2345]
    respawn
    script
      /usr/bin/docker start -a dtest
    end script
    

    我还建议将 -r 标志添加到主 docker daemon 执行脚本中,这样 docker 在主机重新启动时不会自动重新启动您的容器(而是由 upstart 脚本完成)

    sudo sh -c "echo 'DOCKER_OPTS=\"-r=false\"' > /etc/default/docker"
    

    详细描述了配置 Docker 容器以与 upstart 等进程管理器一起使用的过程here

    【讨论】:

    • 这让我非常接近,但仍然需要我在通过新贵管理它之前关闭命名容器......我问了一个后续问题:stackoverflow.com/questions/24872480/…
    • @MarshallAnschutz 好问题。我在那里添加了我的答案。基本上可以通过使用 Docker Remote API 来实现。
    猜你喜欢
    • 2012-11-06
    • 2016-04-12
    • 1970-01-01
    • 2012-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    相关资源
    最近更新 更多