這裏咱們須要清楚,單獨的dockerfile 文件,也是能夠進行編譯的,只不過,他依賴的環境是dockerdocker
命令windows
docker build -t 鏡像名稱:鏡像版本 -f 須要執行dockerfile地址 docker編譯的上下文的地址測試
以上面這個文件爲例子,我在網上看的時候 ,編譯命令是docker build -t myxxx:latest . 注意這裏還有一個點ui
後面在window上面進行執行,一直報錯code
很奇怪,我後面修改了dockerfile 裏面的add 的路徑,指向了windows 的實際jar地址get
實際地址:C:\code\pig4cloud\pig\pig-auth\target\pig-auth.jar 他仍是報錯,docker 甚至給我拼接出來了這樣的目錄dockerfile
ADD failed: stat /var/lib/docker/tmp/docker-builder116102196/C:\code\pig4cloud\pig\pig-auth\target\pig-auth.jar: no such file or directory編譯
開始仔細排查,網上找緣由。經測試。修改dockerfile 的add 爲ADD target/pig-auth.jar ./ 而後執行docker build -t myxxx:latest . 成功,給我打包出來了,後面想了下,以爲是 dockerfile 裏面的參數 WORKDIR 定義了當前目錄爲這裏test
因此相對路徑爲 target/pig-auth.jar ./ 這不是恰好,完美解釋了,因而,我刪除了WORKDIR 參數進行驗證。從新打包,仍是成功了。。。。我靠。黑人問號?打包
因而接着查找資料,求助羣裏,羣裏的一位大手子給與了幫助。讓我瞭解下 docker build -t XXX:XXX BUILD_CONTEXT
後面查找了資料才明白
這裏的build 上下文(context) 就是那會的docker build -t myxxx:latest . 就是最後的這個點,是指當前目錄
docker build 命令經過 Dockerfile 建立鏡像時,會產生一個 build 上下文(context)。所謂的 build 上下文就是 docker build 命令的 PATH 或 URL 指定的路徑中的文件的集合。在鏡像 build 過程當中能夠引用上下文中的任何文件
因此如今一切明白了把,我那會之因此寫arget/pig-auth.jar ./ 運行成功,是由於,我那會在這個目錄下用的 . 指的是當前目錄。好了,咱們如今修改回去dockerfile文件,重寫編寫編譯命令,進行嘗試
docker build -t mqsx:latest -f C:\code\pig4cloud\pig\pig-auth\Dockerfile C:\code\pig4cloud\pig
好了,成功編譯。 這裏須要注意下,應爲咱們這裏,沒用 . 當前目錄,因此命令裏面須要使用-f 指dockerfile 的文件路徑