Python在导出环境变量时抛出KeyError

Python在导出环境变量时抛出KeyError,python,docker,environment-variables,dockerfile,Python,Docker,Environment Variables,Dockerfile,我有一个奇怪的例子,我有一个secret.env文件,我在其中设置了所有环境变量: secret.env export TWITTER_CONSUMER_KEY="something" export TWITTER_CONSUMER_SECRET="something" 然后,我构建了一个docker文件来导出所有变量并按如下方式运行应用程序: FROM python:3.8-slim-buster # Set the working director

我有一个奇怪的例子,我有一个secret.env文件,我在其中设置了所有环境变量:

secret.env

export TWITTER_CONSUMER_KEY="something"
export TWITTER_CONSUMER_SECRET="something"
然后,我构建了一个docker文件来导出所有变量并按如下方式运行应用程序:

FROM python:3.8-slim-buster

# Set the working directory to /app
WORKDIR /app

# Copy the current directory contents into the container at /app
ADD . /app

# Install the dependencies
RUN pip install -r requirements.txt

RUN find . -name \*.pyc -delete

# Export all variables
RUN /bin/bash -c "source secret.env";

# tell the port number the container should expose
EXPOSE 8083

# run the command
ENTRYPOINT ["python", "run.py"]
但是,这会引发一个关键错误:

$ docker run --name fortweet --rm -i -t fortweet:latest bash
Traceback (most recent call last):
  File "run.py", line 1, in <module>
    from app import socketio, app
  File "/app/app/__init__.py", line 65, in <module>
    app = create_app()
  File "/app/app/__init__.py", line 38, in create_app
    my_settings = settings.TwitterSettings.get_instance()
  File "/app/app/setup/settings.py", line 47, in get_instance
    TwitterSettings()
  File "/app/app/setup/settings.py", line 14, in __init__
    self.consumer_key = os.environ["TWITTER_CONSUMER_KEY"]
  File "/usr/local/lib/python3.8/os.py", line 675, in __getitem__
    raise KeyError(key) from None
KeyError: 'TWITTER_CONSUMER_KEY'
$docker run--name fortweet--rm-i-t fortweet:latest bash
回溯(最近一次呼叫最后一次):
文件“run.py”,第1行,在
从应用程序导入socketio,应用程序
文件“/app/app/_init__.py”,第65行,在
app=create_app()
文件“/app/app/\uuuuuu init\uuuuuuu.py”,第38行,在创建应用程序中
my_settings=settings.TwitterSettings.get_instance()
get_实例中的文件“/app/app/setup/settings.py”,第47行
twitter设置()
文件“/app/app/setup/settings.py”,第14行,在__
self.consumer\u key=os.environ[“TWITTER\u consumer\u key”]
文件“/usr/local/lib/python3.8/os.py”,第675行,在__
从“无”提升钥匙错误(钥匙)
KeyError:“TWITTER\u消费者\u密钥”
当我在我的windows上运行这个时,它工作得很好


有人能帮我吗?

您可以使用
docker run--env file secret.env…
在运行时设置环境变量。有关更多信息,请参阅文档


在一个
RUN
命令中查找文件将不会在该
RUN
退出后保持。您也不应该在Docker映像中存储机密。在构建时不使用它们,在运行时应用它们更安全。

有帮助吗?似乎您打算使用内置Dockerfile功能为Docker会话设置环境变量。您可以按照@Karl使用
Docker run--env file secret.env…
,这看起来很棒,但如果我在Dockerfile中设置密钥,并将其推到Github,它将对公众可见,这可能是一个问题
运行源代码…
将永远不会设置持续时间超过当前
运行
步骤的环境变量;看见但是,对于无法包含在映像中的凭据,您需要像@jakub建议的那样使用
docker run--env file
。@jakub感谢您!它很好用。如果你把它作为一个答案,我会接受它:)