亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 服務器 > Web服務器 > 正文

docker entrypoint入口文件詳解

2024-09-01 13:56:02
字體:
來源:轉載
供稿:網友

在編寫Dockerfile的時候,包含一個entrypoint配置,該配置的作用是在容器啟動之前做一些初始化配置,或者一些自定義的配置等。通常是一個腳本,然后在腳本里配置相關預定義項。這篇文檔就詳細說一說entrypoint入口文件的編寫技巧。

下面以mysql官方鏡像中的entrypoint文件docker-entrypoint.sh為例,文件地址為:

docker-entrypoint.sh

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, $2, $3 變量中, 其中新的$@為set --后面的全部內容

舉例來說: bash docker-entrypoint.sh -f xxx.conf

在這種情況下, set -- mysqld "$@" 中的 $@ 的值為 -f xxx.conf

當執行完 set -- mysqld "$@" 這條命令后:

  • $1=mysqld
  • $2=-f
  • $3=xxx.conf
  • $@=mysqld -f xxx.conf

可以看到, 當執行 docker-entrypoint.sh腳本的時候后面加了 -x形式的參數之后, $@的值發生的改變, 在原有$@值的基礎之上, 在前面又預添加了 mysqld 命令

exec "$@"

幾乎在每個docker-entrypoint.sh腳本的最后一行, 執行的都是 exec "$@"命令

這個命令的意義在于你已經為你的鏡像預想到了應該有的調用情況, 當實際使用鏡像的人執行了你沒有預料到的可執行命令時, 將會走到腳本的這最后一行, 去執行用戶新的可執行命令

情況判斷

上面直接說了腳本的最后一行, 在之前的腳本中, 需要充分的去考慮你自己的腳本可能會被調用的情況. 還是拿 MySQL 官方的 dockerfile 來說, 他判斷以下情況:

  • 開頭是 - , 認為是參數的情況
  • 開頭是 mysqld, 且用戶 id 為0 (root 用戶) 的情況
  • 開頭是 mysqld 的情況
  • 判斷完自己應用的所有調用形態之后, 最后應該加上exec "$@" 命令兜底

${mysql[@]}

Shell 中的數組, 直接執行 ${mysql[@]} 會把這個數組當做可執行程序來執行

mysql=( mysql --protocol=socket -uroot -hlocalhost --socket="${SOCKET}" )echo ${mysql[1]}-- output: mysqlecho ${mysql[2]}--output: --protocol=socketecho ${mysql[3]}--output: -urootecho ${mysql[4]}--output: -hlocalhostecho ${mysql[@]}--output: mysql --protocol=socket -uroot -hlocalhost --socket=

exec gosu mysql "$BASH_SOURCE" "$@"

這里的 gosu 命令, 是 Linux 中 sudo 命令的輕量級”替代品”

gosu 是一個 golang 語言開發的工具, 用來取代 shell 中的 sudo 命令. su 和 sudo 命令有一些缺陷, 主要是會引起不確定的 TTY, 對信號量的轉發也存在問題. 如果僅僅為了使用特定的用戶運行程序, 使用 su 或 sudo 顯得太重了, 為此 gosu 應運而生.

gosu 直接借用了 libcontainer 在容器中啟動應用程序的原理, 使用 /etc/passwd 處理應用程序. gosu 首先找出指定的用戶或用戶組, 然后切換到該用戶或用戶組. 接下來, 使用 exec 啟動應用程序. 到此為止, gosu 完成了它的工作, 不會參與到應用程序后面的聲明周期中. 使用這種方式避免了 gosu 處理 TTY 和轉發信號量的問題, 把這兩個工作直接交給了應用程序去完成

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到服務器教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩欧美国产中文字幕| 国产精品一二区| 国产一区在线播放| 国产欧美日韩专区发布| 日本19禁啪啪免费观看www| 成人免费直播live| 成人免费视频在线观看超级碰| 久久久久久国产精品| 日韩高清不卡av| 国产精品男人爽免费视频1| 精品国产依人香蕉在线精品| www欧美xxxx| 综合国产在线观看| 久久精品视频中文字幕| 亚洲第一精品电影| 久久黄色av网站| 日韩电影大片中文字幕| 国产精品综合不卡av| 日韩av综合网站| 92福利视频午夜1000合集在线观看| 亚洲天堂一区二区三区| 亚洲国产精彩中文乱码av在线播放| 国产精品女人久久久久久| 国内伊人久久久久久网站视频| 欧美又大又硬又粗bbbbb| 欧美日韩国产综合视频在线观看中文| 欧美成人网在线| 亚洲一区二区免费在线| 国产成人在线亚洲欧美| 菠萝蜜影院一区二区免费| 欧美日韩国产专区| 高清一区二区三区四区五区| 国产精品视频自拍| 国产精品一区二区三区久久| 亚洲最大在线视频| 欧美国产日韩一区二区在线观看| 欧美激情第一页xxx| 欧洲s码亚洲m码精品一区| 亚洲第一色中文字幕| 亚洲精品美女久久久| 亚洲精品国精品久久99热| 日韩精品一二三四区| 日韩电影在线观看永久视频免费网站| 日韩视频免费中文字幕| 亚洲伊人久久综合| 精品色蜜蜜精品视频在线观看| 国产一区二区三区直播精品电影| 亚洲欧美色图片| 精品国产福利在线| 国内精品久久久| 日本亚洲欧美三级| 欧美精品做受xxx性少妇| 欧美在线亚洲在线| 精品国偷自产在线| 日韩精品视频观看| 亚洲午夜精品久久久久久久久久久久| 久久综合免费视频影院| 亚洲国产中文字幕在线观看| 久久久久久12| 国产在线98福利播放视频| 亚洲最大av网站| 欧美韩国理论所午夜片917电影| 欧美区二区三区| 中文字幕亚洲一区二区三区| 日韩精品免费综合视频在线播放| 亚洲精品自拍视频| zzijzzij亚洲日本成熟少妇| 亚洲精品一区中文| 国产福利精品视频| 久久久久久久久久久国产| 国产亚洲欧洲高清| 欧美黑人国产人伦爽爽爽| 亚洲福利在线看| 日韩欧美中文字幕在线观看| 欧美激情性做爰免费视频| 日韩动漫免费观看电视剧高清| 麻豆一区二区在线观看| 色噜噜国产精品视频一区二区| 久久6精品影院| 成人精品一区二区三区电影免费| 亚洲伦理中文字幕| 热久久99这里有精品| 欧美精品在线播放| 中文字幕精品一区二区精品| 一区二区三区国产视频| 狠狠爱在线视频一区| 国产精品久久久久久久7电影| 精品国产一区二区三区久久狼黑人| 欧美成人免费大片| 性色av一区二区三区| 成人免费高清完整版在线观看| 亚洲成色999久久网站| 欧美精品在线视频观看| 久久人人爽人人爽人人片av高清| 亚洲天堂免费观看| 68精品国产免费久久久久久婷婷| 92看片淫黄大片欧美看国产片| 亚洲影视中文字幕| 欧美最顶级的aⅴ艳星| 久久久久久久久久国产精品| 欧美激情精品久久久久久蜜臀| 国产亚洲美女久久| 亚洲天堂av电影| 欧美电影免费观看网站| 日本道色综合久久影院| 亚洲免费视频观看| 中文字幕少妇一区二区三区| 亚洲视频在线免费观看| 午夜精品福利视频| 国产日韩av在线| 91极品女神在线| 久久久噜噜噜久久中文字免| 成人性生交xxxxx网站| 欧美日韩国产精品| 欧美黄色片在线观看| 久久99久久久久久久噜噜| 亚洲欧美另类中文字幕| 日韩欧美中文字幕在线观看| 日韩精品在线影院| 国外色69视频在线观看| 亚洲国产成人在线视频| 欧美日韩亚洲激情| 中文字幕日韩在线播放| 欧美一级视频在线观看| 91亚洲午夜在线| 色与欲影视天天看综合网| 日韩中文理论片| 亚洲国产欧美一区二区三区同亚洲| 亚洲精品久久久久久久久久久久| 亚洲欧美福利视频| 日韩视频欧美视频| 97超级碰在线看视频免费在线看| 亚洲精品ady| 亚洲午夜未满十八勿入免费观看全集| 国产精品嫩草视频| 日韩成人中文电影| 中文字幕日韩av电影| 成人美女av在线直播| 精品国产乱码久久久久久婷婷| 亚洲欧美激情一区| www国产精品com| 国产成人av在线播放| 日本电影亚洲天堂| 91精品久久久久| 亚洲美女福利视频网站| 国产精品美女视频网站| 国产欧美亚洲精品| 国产成人精品久久久| 久久精品亚洲94久久精品| 久久久久免费视频| 日韩中文字在线| 欧美成人免费大片| 欧美日韩国产第一页| 亚洲欧美精品伊人久久| 成人美女免费网站视频| 久久99精品久久久久久噜噜| 成人av在线天堂| 亚洲精品少妇网址| 亚洲精品美女视频| 亚洲石原莉奈一区二区在线观看| 国产精品偷伦视频免费观看国产| 亚洲国产一区二区三区四区| 国产精品久久久久久久午夜| 国产精品久久久999|