我正在尝试在 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