我能够通过更改容器的配置来解决此问题。
具体来说,我进行了以下更改:
在redis容器中:
- 按照本教程添加通道,并为redis容器创建证书
- 使用此 git代码在Docker容器中配置stunnel
在Celery容器中:
-提高了日志级别以进行 调试
我首先测试了可以通过ssl从本地主机连接到redisdocker容器。
然后,我测试可以通过ssl从celery容器连接到redis容器。docker-compose文件为:
version: '3'services: web: restart: always build: context: ./web dockerfile: Dockerfile expose: - "8000" volumes: - /home/webServer/web:/home/flask/app/web - /home/webServer/redis/ssl:/etc/certs - data2:/home/flask/app/web/project/img command: /usr/local/bin/gunicorn -w 2 -t 3600 -b :8000 project:app depends_on: - postgres stdin_open: true tty: true nginx: restart: always build: context: ./nginx dockerfile: Dockerfile ports: - "80:80" - "443:443" volumes: - /home/webServer/web:/home/flask/app/web - data2:/home/flask/app/web/project/img depends_on: - web postgres: restart: always build: context: ./postgresql dockerfile: Dockerfile volumes: - data1:/var/lib/postgresql/data expose: - "5432" redis: build: context: ./redis dockerfile: Dockerfile restart: always command: sh -c "stunnel /stunnel-redis-server.conf && /usr/local/bin/redis-server /etc/redis/redis.conf" expose: - '6380' ports: - "6380:6380" volumes: - /home/webServer/redis/ssl:/etc/certs - /home/webServer/redis/conf:/etc/redis celery: build: context: ./web command: watchmedo auto-restart --directory=./ --pattern=*.py --recursive -- celery worker -A project.celery --loglevel=debug volumes: - /home/webServer/web:/home/flask/app/web - /home/webServer/redis/ssl:/etc/certs - data2:/home/flask/app/web/project/img depends_on: - redisvolumes: data1: data2:
其他相关文件是:
**redis docker容器上的文件:
- Redis容器Dockerfile
- redis / conf / redis.conf
- redis / stunnel-redis-server.conf
celery docker容器上的设置:
cat web/project/flask_celery.py...key_file = '/etc/certs/localhost.key'cert_file = '/etc/certs/private.pem'ca_file = '/etc/certs/myCA.pem'...celery = Celery(app.import_name, backend=app.config['CELERY_RESULT_BACKEND'], broker=app.config['CELERY_BROKER_URL'], broker_use_ssl = { 'ssl_keyfile': key_file, 'ssl_certfile': cert_file, 'ssl_ca_certs': ca_file, 'ssl_cert_reqs': ssl.CERT_REQUIRED }, redis_backend_use_ssl = { 'ssl_keyfile': key_file, 'ssl_certfile': cert_file, 'ssl_ca_certs': ca_file, 'ssl_cert_reqs': ssl.CERT_REQUIRED })------------------cat project/__init__.py...app.config['CELERY_BROKER_URL'] = 'rediss://webserver_redis_1:6380/0'app.config['CELERY_RESULT_BACKEND'] = 'rediss://webserver_redis_1:6380/0'


