无法从docker容器内的python连接redis
Dockerfile无法从docker容器内的python连接redis,python,docker,redis,Python,Docker,Redis,Dockerfile FROM python:3.6-slim ENV PYTHONUNBUFFERED 1 WORKDIR /usr/src/duck COPY ./ /usr/src/duck RUN apt-get update RUN apt-get install -y redis-server RUN pip install -r requirements.txt CMD ["/bin/bash","-c","python manage.py runserver 0.0.0
FROM python:3.6-slim
ENV PYTHONUNBUFFERED 1
WORKDIR /usr/src/duck
COPY ./ /usr/src/duck
RUN apt-get update
RUN apt-get install -y redis-server
RUN pip install -r requirements.txt
CMD ["/bin/bash","-c","python manage.py runserver 0.0.0.0:8000"]
python代码:
import redis
red = redis.StrictRedis(host="redis", port=6379, db=0)
red.set("working", "yes")
在这里,我试图对python和redis进行dockerize。
上面是我的Dockerfile和python代码
Traceback (most recent call last):
File "/usr/local/lib/python3.6/site-packages/django/core/handlers/exception.py", line 34, in inner
response = get_response(request)
File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/usr/src/duck/settings/views.py", line 6, in check_redis
red.set("working", "yes")
File "/usr/local/lib/python3.6/site-packages/redis/client.py", line 1451, in set
return self.execute_command('SET', *pieces)
File "/usr/local/lib/python3.6/site-packages/redis/client.py", line 772, in execute_command
connection = pool.get_connection(command_name, **options)
File "/usr/local/lib/python3.6/site-packages/redis/connection.py", line 994, in get_connection
connection.connect()
File "/usr/local/lib/python3.6/site-packages/redis/connection.py", line 497, in connect
raise ConnectionError(self._error_message(e))
redis.exceptions.ConnectionError: Error -2 connecting to redis:6379. Name or service not known.
这让我犯了以下错误:
在运行python代码时
Traceback (most recent call last):
File "/usr/local/lib/python3.6/site-packages/django/core/handlers/exception.py", line 34, in inner
response = get_response(request)
File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/usr/src/duck/settings/views.py", line 6, in check_redis
red.set("working", "yes")
File "/usr/local/lib/python3.6/site-packages/redis/client.py", line 1451, in set
return self.execute_command('SET', *pieces)
File "/usr/local/lib/python3.6/site-packages/redis/client.py", line 772, in execute_command
connection = pool.get_connection(command_name, **options)
File "/usr/local/lib/python3.6/site-packages/redis/connection.py", line 994, in get_connection
connection.connect()
File "/usr/local/lib/python3.6/site-packages/redis/connection.py", line 497, in connect
raise ConnectionError(self._error_message(e))
redis.exceptions.ConnectionError: Error -2 connecting to redis:6379. Name or service not known.
请看一看。容器只运行python服务器,而不是redis。 您应该在另一个容器上启动redis服务器(可能redis默认映像也可以)。让python服务器指向它 您很幸运,因为compose文档有一个python应用程序和Redis服务器的示例。
容器仅运行python服务器,而不是redis。 您应该在另一个容器上启动redis服务器(可能redis默认映像也可以)。让python服务器指向它 您很幸运,因为compose文档有一个python应用程序和Redis服务器的示例。
Redis可能没有在容器内运行。仅仅在docker中安装redis服务器并不足以启动它。您可能需要这样的东西:在docker中运行多个进程(python+redis)。redis可能没有在容器中运行。仅仅在docker中安装redis服务器并不足以启动它。您可能需要这样的东西:在docker中运行多个进程(python+redis)。是否可以不使用docker compose?正如@rdas所评论的,您可以让您镜像运行这两个应用程序。他建议:我在生产中使用了这个:您可以
docker运行这两个容器,而无需特别编写。您还需要docker network创建anyname
,并确保在--net anyname
上启动两个容器,以便它们可以看到对方。每个容器一个进程通常被认为是最佳实践。是否可以不使用docker compose?正如@rdas评论的那样,您可以让映像运行这两个应用程序。他建议:我在生产中使用了这个:您可以docker运行这两个容器,而无需特别编写。您还需要docker network创建anyname
,并确保在--net anyname
上启动两个容器,以便它们可以看到对方。每个容器一个过程通常被认为是最佳实践。