我知道您可以将环境变量传递给docker-compose。
搬运工-compose.yml
. . .
mysql:
image: mariadb:10.2
ports:
- "${DB_PORT}:3306"
. . .
$ DB_PORT=3396 docker-compose up
然而,这仅适用于bash。我正在使用PowerShell,并且我正在尝试找到只有一行命令的等价物。
PS> $env:DB_PORT:3306 docker-compose up
不起作用。也没有
多
$env:DB_PORT=3396 `
>> docker-compose -up
我得到的错误是
Unexpected token 'docker-compose' in expression or statement.
如果我一次只做一次它确实有用......
PS> $env:DB_PORT=3396
PS> docker-compose -up
当bash中的等价物非常简单时,是否无法在PowerShell中执行此操作?
答案 0 :(得分:3)
类似POSIX的shell ,例如bash
提供了一种以命令范围的方式设置环境变量的方法,只需预先添加{{ 1}}成对直接命令,如下例所示:
<varName>=<value>
$ foo=bar bash -c 'echo "[$foo]"'; echo "[$foo]"
[bar]
[]
仅为foo=bar
子进程定义 environment 变量foo
; next 命令 - bash -c '...'
- 不看到此变量。
PowerShell 有无等效构造。
您可以做的最好的事情是使用echo ...
在单独声明中定义首先感兴趣的环境变量 ,PowerShell的语句分隔符。您之后调用的任何外部实用程序 - 它总是在子进程中运行 - 将会看到它,但请注意环境变量将在当前的PowerShell会话中保持有效,除非您手动删除它强>:
;
请注意# Set the env. variable, call the command that should see it,
# remove it afterwards.
PS> $env:foo = 'bar'; bash -c 'echo "[$foo]"'; $env:foo = $null
[bar]
如何将环境变量设置为$env:foo = $null
与删除相同;或者,您可以$null
如果您还希望之后恢复预先存在的值:
Remove-Item env:foo
以上产量:
$env:foo = 'original'
# Temporarily change $env:foo to a different value, invoke the
# program that should see it, then restore the previous value.
& { $org, $env:foo = $env:foo, 'bar'; bash -c 'echo "[$foo]"'; $env:foo = $org }
$env:foo
显示[bar]
original
进程看到临时值bash
时,之后恢复了bar
的原始值。
另请注意另一个重要区别:
在 POSIX-like shell 中, environment 变量隐式表现为 shell 变量 - 它们共享唯一的命名空间shell有变量。
相比之下, PowerShell 通过$env:foo
命名空间(例如$env:<varName>
)表示环境变量 ,这与PowerShell自身变量的(无前缀)命名空间(例如,$env:foo
)。