30. tháng 5 2025
Tôi đã tạo nạp tiền bằng sms một giao diện API nền cho socketio bằng flask-socketio. Vì flask-socketio phụ thuộc vào eventlet, tôi cũng đã cài đặt thêm eventlet. Tuy nhiên, khi sử dụng trong môi trường Docker, tôi phát hiện ra rằng nó không thể giải quyết được các biệt danh container được cấu hình trong docker compose.
Sau nhiều giờ vật lộn, điều quan trọng nhất mà tôi rút ra được là: nếu có thể, hãy tránh xa các thư viện Python như eventlet. Chúng giống như đồ chơi, chỉ làm lãng phí thời gian của bạn. Việc chuyển sang Golang càng sớm sẽ càng tốt cho dự án của bạn.
redis.exceptions.ConnectionError: Lỗi -3 khi kết nối đến redis:6379. Thời gian tìm kiếm DNS đã hết.
File "/usr/local/lib/python3.11/site-packages/eventlet/support/greendns.py", dòng 463, trong resolve
return _proxy.query(name, rdtype, raise_on_no_answer=raises,
File "/usr/local/lib/python3.11/site-packages/eventlet/support/greendns.py", dòng 419, trong query
return end()
File "/usr/local/lib/python3.11/site-packages/eventlet/support/greendns.py", dòng 398, trong end
raise result[1]
File "/usr/local/lib/python3.11/site-packages/dns/resolver.py", dòng 1076, trong _compute_timeout
raise LifetimeTimeout(timeout=duration, errors=errors)
File "/usr/local/lib/python3.11/site-packages/redis/connection.py", dòng 1461, trong get_connection
connection.connect()
File "/usr/local/lib/python3.11/site-packages/redis/connection.py", dòng 713, trong connect
raise ConnectionError(self._error_message(e))
redis.exceptions.ConnectionError: Lỗi -3 khi kết nối đến redis:6379. Thời gian tìm kiếm DNS đã hết.
Có tiến triển gì về vấn đề này không? Tôi cũng đã mất nhiều giờ để xử lý. Hiện tại tôi đang sử dụng phiên bản dnspython==1.16.0 như một giải pháp tạm thời. Giải pháp ở đây là hạ cấp phiên bản dnspython.
Trong môi trường đá gà thomo trực tiếp hôm nay gà đòn conda:
> pip list | grep dns
dnspython 2.6.0
> pip install dnspython==1.16.0
Đã gỡ cài đặt thành công dnspython-2.7.0
Đã cài đặt thành công dnspython-1.16.0
Chỉ hạ cấp phiên bản dnspython thôi chưa đủ. Khi sử dụng Python 3.11, bạn sẽ gặp lỗi:
AttributeError: module 'collections' không có thuộc tính 'MutableMapping' Trên các issue trên github cũng đã đề cập đến vấn đề này: Để hỗ trợ Python 3.10, cần phải đảm bảo hỗ trợ phiên bản mới hơn của dnspython. dnspython<2.0.0 có tham chiếu đến collections.MutableMapping, điều này đã bị loại bỏ kể từ Python 3.10. Vì vậy, hạ báo bóng đá cấp phiên bản ảnh Docker của Python xuống 3.9 thì mọi thứ hoạt động bình thường.
> docker exec -it redis /bin/sh
/data # redis-cli
127.0.0.1:6379> keys *
1) "name"