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