为什么没有使用“docker run image command”启动容器的日志?

时间:2015-05-05 05:31:57

标签: git docker gitlab

我使用docker run genezys/gitlab:7.5.2命令创建并启动容器:

[root@localhost ~]# docker run genezys/gitlab:7.5.2
/opt/gitlab/embedded/bin/runsvdir-start: line 34: ulimit: max user processes: cannot modify limit: Operation not permitted
/opt/gitlab/embedded/bin/runsvdir-start: line 37: /proc/sys/fs/file-max: Read-only file system
[2015-05-05T05:43:02+00:00] INFO: Forking chef instance to converge...
......

我可以看到终端输出了日志。

但是当我使用docker run genezys/gitlab:7.5.2 /bin/true命令时:

[root@localhost ~]# docker run genezys/gitlab:7.5.2 /bin/true
[root@localhost ~]#

没有输出日志。

为什么没有使用docker run image command启动容器的日志?

1 个答案:

答案 0 :(得分:3)

那是因为/bin/true CMD(来自docker run genezys/gitlab:7.5.2 /bin/true)会覆盖定义的原始CMD in the Dockerfile

# Default is to run runit & reconfigure
CMD ["/usr/local/bin/gitlab.sh"]

由于GitLab从未运行(使用/bin/true),因此它永远不会输出任何日志。

docker run有一个COMMAND参数:

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

docker run "Overriding Dockerfile image defaults"提及:

  

在运行时无法覆盖四个Dockerfile命令:FROMMAINTAINERRUNADD
  其他所有内容都在docker run 中有相应的覆盖。

包括CMD

  

回想Docker命令行中的可选COMMAND

$ sudo docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
  

此命令是可选的,因为创建IMAGE的人可能已使用Dockerfile COMMAND指令提供了默认CMD。   作为操作员(从图像运行容器的人),您只需指定新的CMD即可覆盖COMMAND指令。

     

如果图片还指定了ENTRYPOINT,则CMDCOMMAND会附加为ENTRYPOINT的参数。