【发布时间】:2021-12-17 01:50:48
【问题描述】:
我正在 docker 容器内构建这个 python 应用程序,但无法访问其中的 Redis 端口。
在我的Dockerfile 中,我添加了一行:
EXPOSE 6379
但运行应用程序会引发错误redis.exceptions.ConnectionError: Error 99 connecting to localhost:6379. Cannot assign requested address.
不得不提的是,我的应用只从 redis 队列中弹出项目。
编辑:
我的Dockerfile 看起来像这样:
FROM python:3.9
ARG DATABASE
ARG SSL_TOKEN_PATH
ENV DATABASE=$DATABASE
ENV SSL_TOKEN_PATH=$SSL_TOKEN_PATH
COPY config/db_config.yaml db_config.yaml
COPY app/requirements.txt requirements.txt
ENV DB_CONFIG=config/db_config.yaml
COPY app/pydb/requirements.txt pydb/requirements.txt
RUN pip3 install -r requirements.txt
RUN pip3 install -r pydb/requirements.txt
COPY app/ .
EXPOSE 6379
CMD ["python3", "-u", "process_file.py"]
【问题讨论】:
-
您使用了多少张图片?一个用于 python 应用程序,一个用于 redis?在 python 容器中,您需要使用 redis 容器 dns,而不是 localhost。由于容器内的 localhost 指向容器本身,redis 不应该在那里运行,而是在另一个容器中运行。
-
我只使用了一张图片——python 应用图片。所以我应该有两个单独的容器?一个用redis,一个用python app?
-
容器的理念是为应用程序的每个组件使用一个容器。这是一个用于您的 python 应用程序,另一个用于 redis 服务器。从您的问题和评论来看,您到底在做什么还不是很清楚。请您提供完整的
Dockerfile -
既然我只想从 redis 队列中弹出项目,我真的需要将 redis 放在一个单独的容器中吗?总而言之,我有一个应用程序可以处理从 redis 队列中弹出的文件。我在编辑中提供了整个
Dockerfile。 -
除非
process_file.py正在启动一个redis实例,否则没有redis服务器启动或监听连接。