我使用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
启动容器的日志?
答案 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命令:
FROM
,MAINTAINER
,RUN
和ADD
。
其他所有内容都在docker run
中有相应的覆盖。
包括CMD
:
回想Docker命令行中的可选
COMMAND
:
$ sudo docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
此命令是可选的,因为创建IMAGE的人可能已使用Dockerfile
COMMAND
指令提供了默认CMD
。 作为操作员(从图像运行容器的人),您只需指定新的CMD
即可覆盖COMMAND
指令。如果图片还指定了
ENTRYPOINT
,则CMD
或COMMAND
会附加为ENTRYPOINT
的参数。