当我运行时,printenv
返回的变量之一是!::=::\
。我注意到该变量存在,因为docker在设置它的情况下无法正常工作。
$ printenv | grep ::
!::=::\
$ docker stack deploy keycloak -c keycloak.yml
unexpected environment "=::=::\\"
只有当我的终端从图形界面启动时,此变量才存在。如果我从另一个终端手动启动同一进程,则该变量不存在。
无法在 bash 中取消设置该变量。
$ unset !::
bash: :: unrecognized history modifier
$ unset \!::
$ env | grep ::
!::=::\
$ printenv | grep :: | cat -A
!::=::\$
$ set +H
$ unset !::
$ unset \!::
$ env | grep ::
!::=::\
如何防止!::=::\
使用开始菜单启动终端时创建环境变量?
该变量在 Git-bash(Msys)和 MSys2 中都存在。
答案1
Docker 帖子中已经报道过此问题
在 Windows 上使用 CLI v23+ 从 cmd.exe 运行时,docker stack deploy 失败 #4078。
解释是,当您从图形界面运行命令时,它会隐式调用cmd.exe
,这意味着它还继承了 CMD 的环境。
一位用户提供了该文章的链接 这些奇怪的 =C: 环境变量是什么? 在哪里可以找到解释:
cmd.exe
基本上保留了名称为空白的特殊环境变量以支持旧的 MS-DOS 功能。这些是 Docker 遇到的环境变量。
本着这种精神,另一位用户建议将错误消息从“意外的环境......”更改为“意外的环境变量......”。