在 docker 容器中找不到环境变量

Environment Variable cannot be found in docker container

我正在尝试在 Ubuntu 服务器上为 discord 机器人设置一个 docker 容器。

我在 Ubuntu 服务器上有 运行 以下内容:

export DISCORD_TOKEN = "*****"

sudo docker run --env DISCORD_TOKEN  me/my-docker-repo

在我的机器人代码中:

import os
TOKEN = os.environ['DISCORD_TOKEN']

当容器为 运行 时,它给出 python 错误 "KeyError: 'DISCORD_TOKEN'"

试试这个,

TOKEN = os.environ.get('DISCORD_TOKEN')

或者,

TOKEN = os.getenv('DISCORD_TOKEN')

如果你想在 python 中设置环境,试试这个,

os.environ["Key"] = Value

原问题的回答(来自我上面的评论):

尝试将 docker 添加到当前用户的用户组。此后,登录到一个新的 bash 会话,再次设置环境变量:DISCORD_TOKEN(和任何其他变量)和 运行 没有 sudo 的命令如下:

sudo docker run --env DISCORD_TOKEN  me/my-docker-repo

这应该可以解决您的问题。

原因

发生这种情况是因为当您使用 sudo 前缀启动容器时,它查找的不是当前用户,而是根用户的环境变量定义。所以如果没有 sudo 前缀,它会在当前用户的环境变量定义中查找。


关于 config file 加载失败的另一个问题,这可能会有所帮助: Docker can’t load config file, but container works fine

sudo 默认情况下将 shell 环境变量重置为最小的 "known safe" 变量集。如果您使用 sudo -E 选项,它将保留环境变量

sudo -E docker run --env DISCORD_TOKEN  me/my-docker-repo

您也可以直接在命令行上传递容器端环境变量,而无需在父级中这样设置shell

sudo docker run --env DISCORD_TOKEN="*****" me/my-docker-repo