docker - 如何在 Windows 命令提示符中设置环境变量,以便它们像 bash 导出一样以 `docker run -e FOO -e …` 传递

标签 docker powershell

Windows 是否有相当于 bash 的 export 的功能?我想设置一个环境变量,以便后续命令可以使用它。我不想想要setx永久环境变量。

例如,这可以在 Windows 终端 PowerShell 命令提示符中与 Docker for Windows 正常工作。 FOO 环境变量值在容器中可用。

PS C:\Users\Owner> docker run -e FOO=bar centos env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=05b90a09d7fd
FOO=bar
HOME=/root

但是如何在 Windows 中设置一个相当于 bash 导出的 env 变量,以便它可以在不直接在每个 docker run 命令上设置值的情况下使用? 您可以在这里看到 set 没有将 FOO 的值传递给容器。

PS C:\Users\Owner> set FOO=bar
PS C:\Users\Owner> docker run -e FOO centos env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=6642033b3753
HOME=/root

我知道我可以创建一个 env 文件并将其传递给 docker run 但我试图避免这种情况。

PS:我在这里问了这个问题,但没有得到答案: https://forums.docker.com/t/how-to-set-environment-variables-in-command-prompt-so-theyre-passed-in-docker-run-e-foo-e/106776/4

最佳答案

来自this answer ,您可以使用 Powershell 的 $env:VARIABLE_NAME 为 shell 设置本地环境变量。

如果我正确理解你的问题,如果你的目标是从当前终端 session 中获取变量名称/值,那么这应该对你有用。

PS C:\> $env:FOO = 'BAR'
PS C:\> docker run -it -e FOO alpine:3.9 /bin/sh
/ # env
HOSTNAME=e1ef1d7393b2
SHLVL=1
HOME=/root
TERM=xterm
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
FOO=BAR
PWD=/
/ # exit
PS C:\>

unset 等效的是以下之一(感谢 @mklement0 的建议):

Remove-Item env:\FOO

# suggested by mklement0
$env:FOO = $null

关于docker - 如何在 Windows 命令提示符中设置环境变量,以便它们像 bash 导出一样以 `docker run -e FOO -e …` 传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66994307/

相关文章:

从 ASPX 文件 PowerShell 读取 URL 的正则表达式

powershell - 如何使用Powershell将manager-DN转换为变量内的电子邮件地址

json - 使用 powershell 编辑 .json 文件

powershell - 导出在列中找到重复值的csv行

docker - Kubernetes 从私有(private)注册表中提取图像失败 --> 未知字段 "imagePullPolicy"

wordpress - 处理Dockerfile以构建WordPress镜像

docker - 无法将Kafka连接到Zookeeper

powershell - 我可以在 powershell 中获得智能感知吗?

Docker/Kafka连接两个不同的容器

hadoop - Mapreduce 作业 ipc.Client 重试连接