在 docker 的官方 Registry 中(store.docker.com) 流行的第三方应用在自己的页面中都提供了 dockerfile 的链接. 而很多 dockerfile 的 ENTRYPOINT 命令都是这么写的 ["docker-entrypoint.sh"] 本篇文章就扫盲下 docker-entrypoint.sh 的特殊用法和设计逻辑 MySQL set -e 你写的每个脚本都应该在文件开头加上 set -e , 这句语句告诉bash如果任何语句的执行结果不是 true 则应该退出. 这样的好处是防止错误像滚雪球般变大导致一个致命的错误, 而这些错误本应该在之前就被处理掉. 如果要增加可读性, 可以使用 set -o errexit , 它的作用与 set -e 相同 set -o pipefail 设计用途同上, 就是希望在执行错误之后立即退出, 不要再向下执行了. 而 -o pipefail 的作用域是管道, 也就是说在 Linux 脚本中的管道, 如果前面的命令执行出了问题, 应该立即退出 shopt -s nullglob 在使用 Linux 中的通配符时 * ?等 如果没有匹配到任何文件, 不会报 No such file or directory 而是将命令后面的参数去掉执行 if [ “${1:0:1}” = ‘-‘ ]; then… 这是一个判断语句, 在官方文件中, 上一行已经给出了注释: if command starts with an option, prepend mysqld 这个判断语句是 ${1:0:1} 意思是判断 $1(调用该脚本的第一个参数), 偏移量0(不偏移), 取一个字符(取字符串的长度) 如果判断出来调用这个脚本后面所跟的参数第一个字符是 - 中横线的话, 就认为后面的所有字符串都是 mysqld 的启动参数 上面的这个操作类似于 Python 的字符串切片 set – mysqld “$@” 在上面判断完第一个参数是 - 开头之后, 紧接着就执行了 set -- mysqld "$@" 这个命令. 使用了 set -- 的用法. set — 会将他后面所有以空格区分的字符串, 按顺序分别存储到$1,...
评论