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
我觉得你在ENTRYPOINT
和CMD
之间感到困惑。 需要明白的一点是,即使一个命令被提供给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
启动命令