2017-06-13 70 views
2

我發生了一些有用的信息,它提示我有一個可以在Dockerfile中使用的內置環境變量$HOSTNAME。在相當數量的搜索中,我無法找到這種內置變量的全面列表。 Dockerfile參考解釋瞭如何使用ENV命令來修改環境變量,但我現在沒有必要這樣做。我只是想知道默認情況下有什麼可用的。有沒有這方面的官方文件?我認爲應該有,並在HOSTNAME做一些搜索會指向我,但沒有骰子。Dockerfile內置的環境變量文檔

回答

2

我只想知道默認情況下有什麼可用的。

這取決於每個圖像。您可以看到哪些變量是在每一個規定這樣做:

docker run <image> env 

或者:

docker inspect <image> -f '{{.Config.Env}}' 

例如:

$ docker run ubuntu env 
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 
HOSTNAME=71fc7d5db1f2 
no_proxy=*.local, 169.254/16 
HOME=/root 

$ docker inspect ubuntu -f '{{.Config.Env}}' 
[PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin] 

或者:

$ docker run node env 
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 
HOSTNAME=42bbb311714a 
no_proxy=*.local, 169.254/16 
NPM_CONFIG_LOGLEVEL=info 
NODE_VERSION=7.10.0 
YARN_VERSION=0.24.4 
HOME=/root 

$ docker inspect node -f '{{.Config.Env}}' 
[PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 
NPM_CONFIG_LOGLEVEL=info NODE_VERSION=7.10.0 YARN_VERSION=0.24.4] 

PS:你可以在運行容器時做同樣的事情:

docker inspect <container-id> -f '{{.Config.Env}}' 
docker exec <container-id> env 
+0

這有很大的幫助。作爲一個筆記,我得到不同的跑步指令答案並檢查阿爾卑斯山。運行命令給出3個值,檢查只給出其中的一個。 – JimmyJames

+1

「碼頭運行」版本運行一個新的容器來執行'env'。 Docker似乎運行提供HOSTNAME的新進程,這是docker run參數'--hostname'因爲docker設置的一個特殊變量。我認爲在圖像中擁有該變量沒有意義,因爲它與基於相同圖像的多個容器不同。 – Robert

+0

您正在尋找我試圖找到的關鍵。這些值是碼頭引擎只能知道的事情,因爲它正在管理這些值。儘管我現在想要解決的問題基本上是人爲設計的,但能夠擁有默認提供的上下文是有用的。 – JimmyJames

1

我猜大部分發生在https://github.com/moby/moby/blob/34536c498d56a0c74fab08bd434407ac4707c971/container/container_unix.go#L57-L72。我不會說$HOSTNAME是Docker特有的東西。在大多數Linux發行版中很常見,並且有很多腳本/ shell使用它。由於Docker沒有運行一個完整的初始化系統,它可以在啓動時設置主機名變量(比如Ubuntu上的/etc/init.d/hostname.sh),因此確保它爲您設置。

如果您指定tty(-t),它們看起來像設置了默認的$PATH$TERM。除了可以指定自己的環境變量之外,當您使用--link鏈接另一個容器(現在已棄用的功能)時,還會獲得一堆可用的環境變量。見https://docs.docker.com/engine/userguide/networking/default_network/dockerlinks/#environment-variables

+0

好東西。偶然你知道在運行羣集和/或使用覆蓋網絡時是否存在類似的變量?現在對我有用的一件事是節點的IP地址。它只是在一個環境變量中,這將是非常方便的。 – JimmyJames

+0

我不知道Swarm是否有單獨注射。您可能只需將內置於圖像中的變量與實際運行輸出進行比較,以查看注入的內容。如果沒有深入研究代碼,它可能很難找到(並且可能沒有記錄在任何地方,因爲搜索已經顯示)。 –