Dockerfile 中的多个 cmd 命令是否可以合并为一个呢?

我目前发现的问题是多写一个 cmd 命令,就多了一层,层这个东西,玩 docker 的都知道,我的理解是这个东西越多,打包的镜像的体积就越大,因此我想压缩我的 cmd 命令,目前的 cmd 命令如下:

CMD ["service", "redis-server", "stop"]
CMD ["service", "redis-server", "start"]
CMD ["service", "memcached", "stop"]
CMD ["service", "memcached", "start"]
CMD ["service", "nginx", "stop"]
CMD ["service", "nginx", "start"]

请问我该如何将这些 cmd 搞成一个呢?网上搜了半天没找到答案,请高手不吝赐教,小弟感激不尽!

晕,貌似我这些 cmd 还没起上作用,run 容器之后进入容器发现这些服务没有启动啊,望大神顺便指点一下这些 cmd 哪里写错了,我进 docker 容器里面执行这些命令是可以启动对应的服务的。

阅读 6.6k
2 个回答

CMD 不会造成层数的增加,RUN 才会。

你指的可能是 RUN,下面的命令不会造成层数的增加。

RUN service redis-server stop \
    service redis-server start \
    ....

CMD 多个指令在一行执行。

CMD service redis-server stop && service redis-server start && ...

https://docs.docker.com/engin...

There can only be one CMD instruction in a Dockerfile. If you list more than one CMD then only the last CMD will take effect.

你说的应该是RUN命令, RUN命令就是执行一次加一层, 所以一般都是 用\续行, 连接一大堆. 或者你也可以写一个shell直接执行.

CMD命令就是 docker run 容器时不带参数执行的命令.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题