Переменная среды не может быть найдена в контейнере Docker - PullRequest
0 голосов
/ 01 февраля 2019

Я пытаюсь настроить докер-контейнер на сервере Ubuntu для дискорд-бота.

Я запустил следующее на сервере Ubuntu:

export DISCORD_TOKEN = "*****"

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

В коде ботаУ меня есть:

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

при запуске контейнера выдает ошибку питона "KeyError: 'DISCORD_TOKEN'"

Ответы [ 3 ]

0 голосов
/ 02 февраля 2019

Ответ на оригинальный вопрос (из моего комментария выше):

Попробуйте добавить docker в группу пользователей текущего пользователя.После этого войдите в новый сеанс bash, снова установите переменную среды: DISCORD_TOKEN (и любые другие переменные) и выполните команду без sudo следующим образом:

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

Это должно решить вашу проблему.

Причина

Это происходит потому, что при запуске контейнера с префиксом sudo он выглядит не у текущего пользователя, а в определениях переменных среды корневого пользователя.Поэтому без префикса sudo он просматривает определения переменных текущего пользователя.


Другая проблема, связанная со сбоем загрузки config file, может помочь: Docker не может загрузитьфайл конфигурации, но контейнер работает нормально

0 голосов
/ 02 февраля 2019

sudo по умолчанию сбрасывает переменные среды оболочки до минимального набора «известных безопасных» переменных.Если вы используете опцию sudo -E, она сохранит переменные среды

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

Вы также можете передавать переменные среды на стороне контейнера непосредственно в командной строке, не устанавливая ее в родительской оболочке

.
sudo docker run --env DISCORD_TOKEN="*****" me/my-docker-repo
0 голосов
/ 01 февраля 2019

Попробуйте это,

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

или,

TOKEN = os.getenv('DISCORD_TOKEN')

, если вы хотите установить env в python, попробуйте это,

os.environ["Key"] = Value
...