Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法从docker容器内的python连接redis_Python_Docker_Redis - Fatal编程技术网

无法从docker容器内的python连接redis

无法从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

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.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
上启动两个容器,以便它们可以看到对方。每个容器一个过程通常被认为是最佳实践。