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



我正在尝试在 Ubuntu 服务器上为不和谐机器人设置一个 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"

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

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

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

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

原因

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


关于config file加载失败的另一个问题,这可能会有所帮助:Docker 无法加载配置文件,但容器工作正常

默认情况下

sudo会将 shell 环境变量重置为一组最少的"已知安全"变量。 如果使用sudo -E选项,它将保留环境变量

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

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

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

最新更新