问题描述
我已经查看了此答案,却不知道如何解决将其应用于我的问题,因此,如果答案是正确的,将不胜感激.
I've looked through this answer and can't figure out how to apply it to my problem, so if the answer is there, clarification would be appreciated.
我也是docker和docker-compose的菜鸟.
I'm also a noob to docker and docker-compose.
我有一个简单的docker-compose.yml
I have a simple docker-compose.yml
version: '3'
services:
redis:
image: "redis:alpine"
web:
build: . # current directory
command: bash -c "python /app/src/manage.py migrate &&
python /app/src/manage.py runserver 0.0.0.0:8000"
volumes:
- .:/app
ports:
- "8000:8000"
当我使用以下代码运行此代码时: docker-compose up
一切似乎正常:
When I run this with: docker-compose up
everything seems ok:
$ docker-compose up
Starting hackerspace_redis_1 ...
Starting hackerspace_redis_1 ... done
Starting hackerspace_web_1 ...
Starting hackerspace_web_1 ... done
Attaching to hackerspace_redis_1, hackerspace_web_1
redis_1 | 1:C 19 Jul 2019 16:49:10.644 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
redis_1 | 1:C 19 Jul 2019 16:49:10.644 # Redis version=5.0.5, bits=64, commit=00000000, modified=0, pid=1, just started
redis_1 | 1:C 19 Jul 2019 16:49:10.644 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
redis_1 | 1:M 19 Jul 2019 16:49:10.645 * Running mode=standalone, port=6379.
redis_1 | 1:M 19 Jul 2019 16:49:10.645 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
redis_1 | 1:M 19 Jul 2019 16:49:10.645 # Server initialized
redis_1 | 1:M 19 Jul 2019 16:49:10.645 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
redis_1 | 1:M 19 Jul 2019 16:49:10.645 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
redis_1 | 1:M 19 Jul 2019 16:49:10.645 * DB loaded from disk: 0.000 seconds
redis_1 | 1:M 19 Jul 2019 16:49:10.645 * Ready to accept connections
web_1 | Operations to perform:
web_1 | Apply all migrations: account, admin, announcements, auth, badges, comments, contenttypes, courses, django_summernote, djconfig, djcytoscape, flatpages, notifications, portfolios, prerequisites, profile_manager, quest_manager, sessions, sites, socialaccount, suggestions, utilities
web_1 | Running migrations:
web_1 | No migrations to apply.
web_1 | Performing system checks...
web_1 |
web_1 | System check identified no issues (0 silenced).
web_1 | July 19, 2019 - 09:49:16
web_1 | Django version 2.0.13, using settings 'hackerspace_online.settings'
web_1 | Starting development server at http://0.0.0.0:8000/
web_1 | Quit the server with CONTROL-C.
我可以通过127.0.0.0:8000的浏览器访问django应用程序.但是,当我尝试登录该应用程序时,我得到:
And I can visit my django app through a browser at 127.0.0.0:8000. However, when I try to log in to the app, I get:
错误111连接到127.0.0.1:6379.连接被拒绝.
Error 111 connecting to 127.0.0.1:6379. Connection refused.
这是我在Django设置中连接到Redis的方式:
Here's how I'm connecting to redis in my django settings:
REDIS_HOST = os.environ.get('REDIS_HOST', '127.0.0.1')
REDIS_PORT = os.environ.get('REDIS_PORT', '6379')
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://{}:{}/1".format(REDIS_HOST, REDIS_PORT),
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
},
#...
}
我如何使django应用程序连接到Redis容器?
How do I get my django app to connect to the redis container?
请注意,据我所知,没有其他使用端口6379的东西(通过 sudo lsof -i -P -n | grep LISTEN
)
Note that as far as I can tell, there is nothing else using port 6379 (via sudo lsof -i -P -n | grep LISTEN
)
推荐答案
127.0.0.1
几乎总是表示此容器".如果您在 Docker Compose 下运行应用程序,
127.0.0.1
in Docker almost always means "this container". If you're running your application under Docker Compose, it
也就是说,在此 docker-compose.yml
文件的上下文中,有主机名 redis
和 web
指向两个容器.
That is, within the context of this docker-compose.yml
file, there are host names redis
and web
that point at the two containers.
您已经完成了重要的配置工作之一.当您的代码说
You've already done one of the important configuration things. When your code says
REDIS_HOST = os.environ.get('REDIS_HOST', '127.0.0.1')
您可以设置一个覆盖内置默认值的环境变量.因此,这里您只需要在 docker-compose.yml
文件中添加环境变量设置:
you can set an environment variable that overrides the built-in default value. So here you just need to add an environment variable setting to your docker-compose.yml
file:
version: '3'
services:
redis:
image: "redis:alpine"
web:
build: . # current directory
environment:
- REDIS_HOST=redis
ports:
- "8000:8000"
# application source code and default command are built into the image
这篇关于docker-compose + django + redis-错误111连接到127.0.0.1:6379.连接被拒绝的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!