docker构build不支持stream程
所以这可能是我的Dockerfile:
FROM ubuntu:latest RUN apt-get -y update && apt-get install -y mysql-server-5.6 RUN service mysql start RUN service mysql status
它会在构build过程中抛出一个错误,即使上一个命令成功完成,MySQL仍未运行。 Deamons似乎不能在Dockerfile中的不同命令之间运行。
这是一个人为的例子,但在我真正的Dockerfile中,我有一些configuration数据库的行,他们需要在后台运行一个deamon。 解决这个问题的唯一方法就是运行:
RUN service mysql start && ./database_configure1.sh RUN service mysql start && ./do_something_else_with_db.sh and so on
但是,这可能不是这样做的。 有没有更好的方法去做这件事?
Dockerfile中的每个RUN
命令都在不同的容器中运行,所以这里是事件的实际顺序:
-
service mysql start
启动MySQL。 - 然后容器停止(MySQL停止)。
- 然后拍摄快照。
- 然后使用该快照启动一个新的容器。
-
service mysql status
在新容器中运行。
当然, mysql
实际上并不在后面的容器中运行,所以失败了。
所以,相反,您需要在一个构build步骤中完成所有工作 。 通常情况下,您需要通过在容器中运行一个shell脚本来执行此操作。
开始。
你的目录树应该是这样的:
Dockerfile do_stuff_with_mysql.sh
然后,在你的Dockerfile中,执行:
ADD do_stuff_with_mysql.sh / RUN chmod 755 /do_stuff_with_mysql.sh RUN do_stuff_with_mysql.sh
而在do_stuff_with_mysql.sh
,你应该看起来像这样:
#!/bin/bash set -o errexit set -o nounset service mysql start ./database_configure1.sh ./do_something_else_with_db.sh service mysql stop # you should loop on `service mysql status` to confirm MySQL is done shutting down