我正在通过以下方式启动 docker 容器:
docker run -e IP_AD=192.168.99.100 -p 80:80 flask_app
我只是尝试将 IP 地址传递给 Flask 应用程序,以便可以从我的应用程序加载某些内容。这个资源会随着环境的不同而改变,所以这就是我想将它作为环境变量传递的原因。
后来,我想在运行的 Flask 应用程序的上下文中使用这个变量。如何从我的 Flask 应用程序加载
IP_AD
并将其用作 python 变量?
我尝试过这样做:
import os
os.environ.get('IP_AD')
但它似乎没有加载任何东西。加载从 docker run -e 传递的 IP_AD 的正确方法是什么
像这样创建文件.env
model_path=./model/data_fs.csv
然后安装库
.env
通过执行
pip3 install python-dotenv==0.17.1
将此添加到您的代码中以加载所有
.env
变量
from dotenv import load_dotenv
load_dotenv()
这样您就可以访问它
if os.getenv("model_path", None) is not None:
return os.getenv("model_path", None)
# otherwise raise an exception
raise Exception("no .env file found")
为此,您需要在命令之前放置
env
变量,以便可以从 Flask 应用程序访问它。
让我举个例子,我这里有示例烧瓶
import os
from flask import Flask, jsonify
app = Flask(__name__)
@app.route("/", methods=["OPTIONS", "GET"])
def home():
IP_AD = os.environ.get("IP_AD")
return jsonify({"status": 200, "message": IP_AD})
if __name__ == "__main__":
app.run()
然后当使用
env
变量运行时,你可以这样做
IP_AD=192.168.99.100 python main.py
那么,当您尝试访问
env
变量时,它将显示如下,例如使用curl
curl --location 'http://localhost:5000'
反应会是这样的
{"message":"192.168.99.100","status":200}
所以在你的情况下会是
IP_AD=192.168.99.100 docker run -e -p 80:80 flask_app
你可以这样尝试
import os
os.environ["IP_AD"]