docker交互模式在进入点之后退出

鉴于以下Dockerfile:

From python:2.7-wheezy RUN apt-get update && apt-get upgrade --assume-yes RUN apt-get install mysql-server --assume-yes ENTRYPOINT service mysql start 

当我运行docker时,在启动mysql服务器后立即退出:

 Jamess-iMac:docker-python-test jameslin$ docker run -i -t 9618f71f65e4 /bin/bash [ ok ] Starting MySQL database server: mysqld .. [info] Checking for tables which need an upgrade, are corrupt or were not closed cleanly.. Jamess-iMac:docker-python-test jameslin$ 

我如何使它自动启动MySQL,但保持交互模式?

Ubuntu 12.04到docker“服务mysql启动”

如果你阅读上面的线程,你可以看到Docker没有任何运行级别,所以mysql不知道什么时候应该启动。

您可以运行两个容器并在它们之间创build一个新的容器。 一个用于mysql ,另一个用于pythonapp 。 这里是如何创build两个容器之间的networking

 docker network create <network_name> 

使用--net=<network_name>启动将容器附加到新networking的容器

 docker run -d --net=anetwork --name=mysql -e MYSQL_USER=ROOT -e MYSQL_ALLOW_EMPTY_PASSWORD=yes mysql docker run --net=anetwork --name=pythonapp -it python:2.7-wheezy bash 

在这里输入图像说明

我觉得你在ENTRYPOINTCMD之间感到困惑。 需要明白的一点是,即使一个命令被提供给docker运行调用,一个ENTRYPOINT将始终在图像启动时运行 。 如果你试图提供一个命令,它将把它作为参数添加到ENTRYPOINT ,replaceCMD指令中定义的默认值。 如果您明确地将一个--entrypoint标志传递给--entrypoint run命令,那么只能覆盖ENTRYPOINT

这意味着用/bin/bash命令运行映像不会给你一个shell; 相反,它会提供/bin/bash作为service mysql start一个参数。

networking之间的容器 Ubuntu的12.04进入docker“服务MySQL的启动”

在Dockerfile中CMD和ENTRYPOINT的区别

你的ENTRYPOINT / CMD指令需要是一个长时间运行的命令。 service mysql start不是一个连续的命令,在Ubuntu中,服务本身,然后命令退出。

为了简单起见 – 如果你只是想运行一个mysql容器,你可以运行docker run mysql 。 如果你绝对需要运行一个一次性的mysql容器,你可以从默认的mysql容器启动的方式捎带: MySql Dockerfile – CMD ["mysqld"] – 应该类似于你所看到的实际在/etc/init.d/mysql启动命令