运行docker集装箱时,我必须提供一个命令吗?

我想在一个centos:6.6容器上安装mysql服务器。

然而,当我运行docker run --name myDB -e MYSQL_ROOT_PASSWORD=my-secret-pw -d centos:6.6 ,我得到了docker: Error response from daemon: No command specified. 错误。

docker run --help检查文档,发现COMMAND似乎是执行docker run时的可选参数。 这是因为[COMMAND]放在一对方括号内。

$ docker run –help

用法:docker run [OPTIONS] IMAGE [COMMAND] [ARG …]

在新的容器中运行一个命令

我也发现mysql的官方存储库在启动一个MySQL容器时没有指定一个命令:

启动一个MySQL实例很简单:

$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

为什么运行一个centos:6.6容器时要提供一个命令,但运行一个mysql容器时却不行呢?

我猜测也许centos:6.6是专门configuration的,以便用户在运行时必须提供一个命令。

如果你使用centos:6.6,你需要在发出“docker run”命令时提供一个命令。

mysql官方仓库没有指定命令的原因是因为它的docker文件中有CMD命令:CMD [“mysqld”]。 在这里检查它的docker文件。

docker文件中的CMD是在没有命令的情况下运行容器时的默认命令。

你可以在这里阅读,以更好地理解你可以在docker文件中使用什么。

在你的情况下,你可以

  1. 开始你的centos 6.6容器
  2. 以官方的mysql docker文件作为参考,发出类似的命令(把apt-get改成yum(或者如果你不使用默认的root用户,sudo yum)
  3. 一旦你可以成功启动mysql,你可以把你的所有命令放到你的docker文件中,只要确保第一行是“From centos:6.6”
  4. build立你的形象
  5. 用你的镜像运行一个容器,然后你不需要在docker run中提供一个命令
  6. 您可以在docker中心共享您的docker文件,以便其他人可以使用您的docker文件。

祝你好运。