容器启动时的交互式容器+守护程序进程

时间:2016-05-23 16:32:40

标签: docker dockerfile

我想创建一个交互式容器,但也要在后台运行一个守护进程。

我使用ENTRYPOINT构建了一个图像(Dockerfile:ENTRYPOINT [" service"," mysql"," start"])并通过此图像,我创建了一个交互式容器,但容器只是没有启动..

    $ docker create --net=host --name=debian-mysql -it ivanlmj/debian-7-mysql-5.7.12:latest bash
    a66630403170f87ca7760a4609675708fa98abfe7e2b7b53a76a147f626aa733

    $ docker ps --all -f "name=debian-mysql"
    CONTAINER ID        IMAGE                                  COMMAND                CREATED             STATUS              PORTS               NAMES
    a66630403170        ivanlmj/debian-7-mysql-5.7.12:latest   "service mysql start   14 seconds ago                                              debian-mysql        

    $ docker start debian-mysql
    debian-mysql

    $ docker ps --all -f "name=debian-mysql"
    CONTAINER ID        IMAGE                                  COMMAND                CREATED             STATUS                              PORTS               NAMES
    a66630403170        ivanlmj/debian-7-mysql-5.7.12:latest   "service mysql start   27 seconds ago      Exited (0) Less than a second ago                       debian-mysql

构建交互式容器的正确方法是什么,该容器还有一个守护程序在后台自动运行?

非常感谢任何帮助。

先谢谢你们!

1 个答案:

答案 0 :(得分:-1)

经过几个小时的努力,我找到了它!

Dockerfile内部:

 
    FROM debian:jessie
    MAINTAINER Ivan Leon (ivanlmj@gmail.com) - @ivanleoncz
    RUN ...
    ...
    ...

    CMD service mysql start && bash 

  • 此最终声明将通过Sys V init脚本或Upstart启动MySQL。
  • 如果守护程序启动成功(按位AND:&&),之后将生成BASH提示。
  • 从图像创建容器时,只需指定" -it"对于我是交互式容器,没有通过" bash"作为命令。
    docker run --net=host --name=debian-mysql -it ivanlmj/debian-7-mysql-5.7.12

完成!

重要信息

CMD has two forms: with shell and without shell (JSON Array).

If you use the shell form of the CMD, then the  will execute 
in "/bin/sh -c" (it is the default Docker ENTRYPOINT). 

重要参考: https://docs.docker.com/engine/reference/builder/#cmd