dockerfile 写法的疑问?


在dickerhub上看了不少镜像的Dockerfile ,有些地方不太懂,请教一下大神。

redis的Dockerfile 后面一段是这样的
COPY docker-entrypoint.sh /entrypoint.sh
ENTRYPOINT

EXPOSE 6379
CMD

理解为,当启动容器时,执行/entrypoint.sh 这个脚本,将CMD 的redis-server 作为参数,但是这个/entrypoint.sh 就看不懂了,

!/bin/bash

set -e

if ; then
chown -R redis .
exec gosu redis "$@"
fi

exec "$@"
这个exec gosu redis "$@" 是什么意思,为什么很多脚本最后要加上exec "$@" 这个?
已邀请:

[已注销]

赞同来自: ɡōōd洋


shell部分知识,首先shell命令的格式为 CMD ARGS
比如对于cp命令来说 cp src dist
那么$1就是src $2就是disc ,而$@就是所有的参数列表,src dist。
那么我们再回到dockerfile里来,首先CMD指令在Dockfile中总只执行最后一条,或者是docker run命令最后那段参数,如果外部指定的CMD也是一个redis-server 开头的指令,那么说明$2 $3肯定是redis-server的后续参数,那么我只要全部接过来继续用就可以了。
如果不是,那么一定是一个新的CMD,需要额外进行执行。

要回复问题请先登录注册