Dockerfile 中的默認 WORKDIR 是什麼?
一、概述
在本教程中,我們將了解 Dockerfile 中的[WORKDIR](https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#workdir)
指令。我們將討論它的作用、默認值以及如何在 Dockerfile 中使用它。我們還將討論它在 Dockerfile 創建中的重要性。
2. WORKDIR
指令是什麼
Dockerfile 中的WORKDIR
指令為 Dockerfile 中的後續指令設置當前工作目錄。當執行WORKDIR
指令時,Dockerfile中的所有後續指令都將相對於指定目錄執行。
例如,如果WORKDIR
指令設置為/app
,那麼所有後續指令都將相對於/app
目錄。 WORKDIR
指令切換到 Docker 鏡像中的特定目錄,如應用程序代碼目錄,以便於在後續指令中引用文件。
需要注意的是, WORKDIR
指令僅為 Dockerfile 中的後續指令設置當前工作目錄。如果WORKDIR
指令使用根目錄的默認值( /
),但 Dockerfile 中沒有後續指令,則不會對當前工作目錄產生任何影響。
3.默認的WORKDIR
如果 Dockerfile 中未指定WORKDIR
指令,則默認WORKDIR
是根目錄 ( /
)。也就是說,如果一個Dockerfile中沒有WORKDIR
指令,那麼後面的所有指令都會相對於根目錄執行。但是,我們可以通過在WORKDIR
指令中指定不同的目錄來覆蓋此默認值。
請注意,無論 Docker 映像如何, WORKDIR
指令的默認值始終是根目錄 ( /
)。
WORKDIR
指令的默認值會影響依賴於工作目錄的命令的行為。比如Dockerfile中有一條命令,使用[cd](https://www.gnu.org/software/bash/manual/html_node/Bourne-Shell-Builtins.html#index-cd)
命令切換到特定目錄。現在,如果我們不指定WORKDIR
指令,那麼 Dockerfile 將使用默認值“ /
”。現在, cd
命令將嘗試更改到 Dockerfile 中文件系統根目錄中的那個目錄。如果根目錄中不存在該目錄,則該命令將失敗。
4.改變WORKDIR
在 Docker 中,我們還可以更改容器的工作目錄。我們可以使用WORKDIR
指令為 CMD/ ENTRYPOINT
指令中指定的命令指定工作目錄。讓我們看看在 Dockerfile 中使用WORKDIR
:
FROM centos
WORKDIR /home
ENTRYPOINT ["sh", "-c", "pwd"]
在這種情況下, WORKDIR
指令將工作目錄設置為/home
。 ENTRYPOINT
指令指定在容器的/home
目錄中執行的pwd
命令。
或者,我們也可以在運行 Docker 容器時使用w
或–workdir
選項指定工作目錄:
$ docker run -w /home centos:latest sh -c "pwd"
此 Docker 運行命令將在容器內的/home
目錄中執行pwd
命令。
5.結論
在本文中,我們發現了WORKDIR
指令的默認值是“ /
”。 WORKDIR
指令在 Docker 鏡像中的不同目錄之間切換。我們可以通過為WORKDIR
指令指定自定義值來覆蓋它。