我收到 servertimeout 錯誤,所以我假設我的 MongoDB 和 Flask 應用程式存在連接錯誤。
在 docker-compose.yml
mongodb:
image: mongo:latest
hostname: test_mongodb
environment:
- MONGO_INITDB_DATABASE=staff_db
- MONGO_INITDB_ROOT_USERNAME=admin
- MONGO_INITDB_ROOT_PASSWORD=password
volumes:
- ./init-db.js:/docker-entrypoint-initdb.d/init-db.js:ro
ports:
- 27017:27017
應用程式
def get_db():
client = MongoClient(host='test_mongodb',
port=27017,
username='admin',
password='password',
authSource='admin')
db = client["staff_db"]
print("connection good")
return db
@app.route('/location')
def get_staff_location():
db = ""
staffs = []
try:
db = get_db()
_staffs = db.beaconLocation_tb.find()
for staff in _staffs:
temp_dict = {
"id": staffLocation["id"],
"staffid": staffLocation["staffid"],
"name": staffLocation["name"]
}
staffs.append(temp_dict)
return jsonify({'staff': staffs})
except:
pass
finally:
if type(db) == MongoClient:
db.close()
init-db.js
db = db.getSiblingDB("staff_db");
db.staff_tb.drop();
db.staff_tb.insertMany([
{
"id":1,
"staffid": 1,
"name": "Darren"
},
{
"id": 2,
"staffid": 2,
"name": "Tony"
},
]);
錯誤資訊
pymongo.errors.ServerSelectionTimeoutError: test_mongodb:27017: [Errno -3] 名稱決議暫時失敗,超時:30s,拓撲描述:<TopologyDescription id:6194ffbbbce36c5d06b983f6,topology_type:Single,server2Description('10db7') server_type: Unknown, rtt: None, error=AutoReconnect('ict3102_mongodb:27017: [Errno -3] 名稱決議暫時失敗')>]>
任何人都可以看到我犯的錯誤嗎?
uj5u.com熱心網友回復:
hostname:在 Compose 設定中幾乎什么都不做。如果您docker exec在容器中獲取 shell 并且 shell 提示顯示本地主機名,則該設定將更改顯示在那里的主機名,但這幾乎是它唯一的影響。您通常不需要設定此選項。
相反,Compose 服務名稱可以用作容器之間通信的主機名。Docker 檔案中的 Compose中的網路中進一步描述了此設定。
mongodb: # <-- this is a valid host name
image: mongo:latest
# hostname: test_mongodb # <-- does nothing, remove it
ports: # <-- optional and ignored for connections
- 27017:27017 # between containers; always use 27017
我建議通過環境變數使您的資料庫連接資訊可配置。請注意,如果您是從容器或 Docker 之外的開發環境進行連接,則連接到此 MongoDB 實體所需的主機名會有所不同。
# If the environment variable is unset (you're running it from a
# non-Docker virtual environment) use a reasonable default for a
# local developer
client = MongoClient(os.environ.get('MONGODB_HOST', 'localhost'), ...)
version: '3.8'
services:
application:
build: .
environment:
MONGODB_HOST: mongodb # its Compose service name, not its hostname:
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/358958.html
標籤:Python MongoDB 码头工人 烧瓶 docker-compose
上一篇:如何將我的Flask應用程式連接到MongoDB(VSCode)?
下一篇:增加Flask中的cookie值
