【发布时间】:2023-03-12 01:07:01
【问题描述】:
我正在尝试编写一个愚蠢的应用程序,以便我可以练习 docker(我正在尝试学习 Docker)。因此,我使用 Mongo 编写了一个简单的烧瓶应用程序,但是当我尝试启动时,我收到如下错误:
Traceback (most recent call last):
File "C:\Users\anton\Desktop\cars\app.py", line 16, in <module>
app.config["MONGO_URI"] = 'mongodb://' + os.environ['MONGODB_USERNAME'] + ':' + os.environ['MONGODB_PASSWORD'] + '@' + os.environ['MONGODB_HOSTNAME'] + ':27017/' + os.environ['MONGODB_DATABASE']
File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.496.0_x64__qbz5n2kfra8p0\lib\os.py", line 679, in __getitem__
raise KeyError(key) from None
KeyError: 'MONGODB_USERNAME'
我一直在这里搜索文档和几个不同的线程,并尝试使用其他一些方法来定义有效的 app.config,但我需要它是这样的,所以我可以将它添加到 @我的 docker-compose 中的 987654322@ 字段。这是app.py:
from flask import Flask, jsonify
from flask_pymongo import PyMongo
import os
import json_logging, logging, sys
app = Flask(__name__)
json_logging.init_flask(enable_json=True)
json_logging.init_request_instrument(app)
logger = logging.getLogger("mongodb-service")
logger.setLevel(logging.DEBUG)
logger.addHandler(logging.StreamHandler(sys.stdout))
app.config["MONGO_URI"] = 'mongodb://' + os.environ['MONGODB_USERNAME'] + ':' + os.environ['MONGODB_PASSWORD'] + '@' + os.environ['MONGODB_HOSTNAME'] + ':27017/' + os.environ['MONGODB_DATABASE']
mongo = PyMongo(app)
db = mongo.db
@app.route('/')
def ping_server():
return "Welcome to best website ever"
@app.route('/cars')
def get_stored_cars():
# db = get_db()
_cars = db.car_tb.find()
cars = [{"brand": car["brand"], "model": car["model"]} for car in _cars]
return jsonify({"cars": cars})
我想像这样将它传递给我的 docker.compose.yml:
version: "3.7"
services:
app:
container_name: cars_app
image: latalavera/flask-app:1.4
build: .
environment:
APP_ENV: "dev"
APP_DEBUG: "False"
MONGODB_DATABASE: cars_db
MONGODB_USERNAME: root
MONGODB_PASSWORD: pass
MONGODB_HOSTNAME: mongodb-flask
ports:
- ${APP_PORT}:${APP_PORT}
depends_on:
- mongodb
networks:
- app_network
【问题讨论】:
-
Os.environ 返回环境变量 - 在 Windows 中使用 set 命令初始化。似乎您的变量没有设置 - 或者您是否在其他地方这样做了?
-
我在学习 Docker 时可能会感到困惑,但我认为 docker compose 中归档的环境将为容器创建那些环境变量。有错吗?
标签: python docker flask docker-compose pymongo