无法连接到应用程序中的redis容器,但可以ping到该容器

时间:2019-08-18 00:41:49

标签: docker flask redis docker-compose python-3.6

我尝试从本地计算机中的另一个独立应用程序容器连接到独立容器中的redis服务器。

起初,一切正常。然后,我为redis容器创建了一个dockerfile,而不是使用官方映像直接创建了一个dockerfile,并将redis配置文件更改为我自己的文件,在这里我仅将 appendonly从no更改为yes 。它突然停止工作,错误为 redis.exceptions.ConnectionError:错误111连接到redis:6379。连接被拒绝

这是我的docker-compose.yml。

2019-08-17 18:02:29,048 WARN  [io.sma.jwt.aut.pri.DefaultJWTTokenParser] (executor-thread-1) Token is invalid: JWT (claims->{"identityType":"user","authorities":[],"accountId":"0812081208","userId":"ybx8912jq59","iat":1566086374,"exp":1566089974}) rejected due to invalid claims. Additional details: [[17] Unexpected exception thrown from validator org.jose4j.jwt.consumer.IssValidator: java.lang.NullPointerException at org.jose4j.jwt.consumer.IssValidator.expectedValue(IssValidator.java:72); org.jose4j.jwt.consumer.IssValidator.validate(IssValidator.java:59); ...omitted...]
2019-08-17 18:02:29,050 DEBUG [io.qua.sma.jwt.run.aut.JwtIdentityManager] (executor-thread-1) failed, id=null, credential=io.quarkus.smallrye.jwt.runtime.auth.JWTCredential@780ca7ed: org.wildfly.security.auth.server.RealmUnavailableException: Failed to verify token
        at io.quarkus.smallrye.jwt.runtime.auth.MpJwtValidator.validateClaimsSet(MpJwtValidator.java:44)

这是redis的dockerfile:

id=null

以及该应用的dockerfile:

version: '3'

services:
  flask:
    build: ./flask
    container_name: flask
    volumes: 
      - ./flask:/src
    expose: 
      - "5000"
    links:
      - redis
    tty: true
    restart: always

  redis:
    build: ./data/redis
    container_name: redis
    expose: 
      - "6379"
    volumes: 
      - ./data/redis:/data

我尝试从应用程序容器ping redis,它运行良好。

FROM redis:alpine
COPY ./redis.config /usr/local/etc/redis/redis.conf
CMD [ "redis-server", "/usr/local/etc/redis/redis.conf" ]

,还尝试对redis容器内的应用容器执行ping操作,它也起作用。

FROM python:3.6.9-alpine
WORKDIR /src
ADD . /src
RUN apk add python3-dev build-base linux-headers pcre-dev
RUN addgroup -S uwsgi && adduser -S uwsgi -G uwsgi
RUN pip install --no-cache-dir -r requirements.txt
CMD ["uwsgi","app.ini"]

我的简单计数器应用程序的代码是

/src # ping redis
PING redis (172.18.0.3): 56 data bytes
64 bytes from 172.18.0.3: seq=0 ttl=64 time=0.121 ms
64 bytes from 172.18.0.3: seq=1 ttl=64 time=0.163 ms
64 bytes from 172.18.0.3: seq=2 ttl=64 time=0.116 ms
64 bytes from 172.18.0.3: seq=3 ttl=64 time=0.166 ms
64 bytes from 172.18.0.3: seq=4 ttl=64 time=0.158 ms
^C
--- redis ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 0.116/0.144/0.166 ms

我完全迷路了,不知道如何解决。我尝试使用默认映像而不使用dockerfile来构建自己的映像,并且该映像有效。但是,当前设置和默认图像之间的唯一区别是,我使用了自己的redis.config,其中我进行的仅更改是将仅附加项从否更改为是 。而且我现在无法连接到Redis。

有人可以帮我吗?

1 个答案:

答案 0 :(得分:1)

使用自定义redis.conf以及从http://download.redis.io/redis-stable/redis.conf中获取redis.conf可能有两个原因。

  1. bind 127.0.0.1
  2. protected-mode yes

对此行bind 127.0.0.1进行注释,并在redis.conf protected-mode no中禁用保护模式。

默认情况下,Redis Dockerfile官方网站禁用了保护模式。