簡體   English   中英

mac 上沒有顯示環境變量

[英]Environment variables not showing up on mac

在 shell 之外通過 ~/.bash_profile 或 ~/.bashrc 設置的環境變量不會出現在 docker 或 env 中,盡管可以在 Z2591C98B70119FE624898B1E424BE.5 中訪問

Bash_profile 包含TEST_ENV_VAR=123行,重啟終端后,可以通過$TEST_ENV_VAR訪問該變量,但是 docker 和 env 無法訪問此環境變量。

Henrys-MacBook-Pro:~ henry$ echo $TEST_ENV_VAR 
123          
Henrys-MacBook-Pro:~ henry$ docker run -it -e TEST_ENV_VAR ubuntu env | grep TEST_ENV_VAR
Henrys-MacBook-Pro:~ henry$ env | grep TEST_ENV_VAR

然而終端可以訪問它,甚至將它傳遞給 docker:

Henrys-MacBook-Pro:~ henry$ docker run -it -e TEST_ENV_VAR=${TEST_ENV_VAR} ubuntu env | grep TEST_ENV_VAR
TEST_ENV_VAR=123

而且這個問題通常不是環境變量的問題,因為終端中設置的變量按預期工作:

Henrys-MacBook-Pro:~ henry$ export TEST_ENV_VAR=1234
Henrys-MacBook-Pro:~ henry$ docker run -it -e TEST_ENV_VAR ubuntu env | grep TEST_ENV_VAR
TEST_ENV_VAR=1234

我正在運行 macOS Mojave,10.14.5,經典終端,docker 19.03.4,ls -al ~ 的 output:

-rw-r--r--   1 henry  staff    455 Nov 12 11:50 .bash_profile

docker實際上並沒有啟動容器。 相反,它會向 Docker 引擎(在與執行docker的環境無關的單獨環境中運行)發送一條消息,請求為您啟動一個容器。 因此,新容器不會繼承您當前 shell 環境中的任何變量。

通過您的TEST_ENV_VAR=${TEST_ENV_VAR}嘗試,您明確告訴docker創建一個名為TEST_ENV_VAR的環境變量,其值是通過在新容器中擴展TEST_ENV_VAR now產生的,而不是嘗試從適當的環境繼承變量。

即使忽略這一點,您實際上並沒有使用TEST_ENV_VAR=123創建環境變量; 您只創建了一個普通的 shell 變量。 要讓env看到它,您需要先導出它。

$ TEST_ENV_VAR=123
$ env | grep TEST_ENV_VAR
$ export TEST_ENV_VAR
$ env | grep TEST_ENV_VAR
TEST_ENV_VAR=123

.bash_profile 適用於您的用戶。 Docker 在其自己的環境中運行(而不是在用戶生成的子shell 中運行)。 導出僅將信息向下發送到子 shell。 您需要使變量在更高級別可用。

/etc/environment 

里面小心點。

或者,您可以考慮要求 Docker 自行進行這些更改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM