使用 traefik 时 Redis 连接被拒绝
Redis connection refused when using traefik
我很难尝试使用 traefik 为我的所有应用程序配置一个 redis 容器。这是我的配置:
1 - Docker 为 Traefik 和 Redis 编写:
版本:'2'
services:
proxy:
container_name: traefik
image: traefik:1.3.6-alpine
command: --docker
ports:
- 80:80
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./traefik.toml:/traefik.toml
networks:
- proxy
labels:
- traefik.frontend.rule=Host:monitor.company.dev
- traefik.port=8080
redis:
container_name: main_redis
image: redis:3.2
restart: always
volumes:
- ./data/redis:/data
networks:
- proxy
labels:
- traefik.backend=main-redis
- traefik.default.protocol=http
- traefik.frontend.rule=Host:main-redis.company.dev
- traefik.docker.network=proxy
- traefik.port=6379
networks:
proxy:
external: true
2 - Docker 为我的 PHP 申请撰写。
version: '2'
services:
...
php:
container_name: myapp_php
build: ./docker/php # php:7.1-fpm base image
networks:
- internal
- proxy
labels:
- traefik.enable=false
- traefik.docker.network=proxy
expose:
- 9000
networks:
proxy:
external: true
internal:
external: false
我尝试将我的 php 应用程序连接到端口 6379
和 80
上的 main-redis.company.dev
,但我收到一条 Redis::connect(): connect() failed: Connection refused
消息。
我也在 redis.conf
中更改了这些内容:
注释行 bind 127.0.0.1
并将 protected-mode
更改为 no
我的 docker 容器在同一个网络中,所以我认为它应该可以工作。有谁知道我为什么会遇到这个问题?
首先,从您的 redis 服务定义中删除 traefik 标签,traefik 目前(2017 年 11 月)是一个 HTTP 代理,所以您不能那样公开端点
看这里:
https://github.com/containous/traefik/issues/10
https://github.com/containous/traefik/issues/1611
然后将 php 服务连接到 redis 服务,看起来您正试图在同一个 docker 实例(而不是外部)中执行此操作
而不是 main-redis.company.dev:6379,它应该像下面这样:
- redis:6379
- main_redis:6379
- %PROJECT_NAME%_redis:6379
取决于您部署容器的方式
我很难尝试使用 traefik 为我的所有应用程序配置一个 redis 容器。这是我的配置:
1 - Docker 为 Traefik 和 Redis 编写: 版本:'2'
services:
proxy:
container_name: traefik
image: traefik:1.3.6-alpine
command: --docker
ports:
- 80:80
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./traefik.toml:/traefik.toml
networks:
- proxy
labels:
- traefik.frontend.rule=Host:monitor.company.dev
- traefik.port=8080
redis:
container_name: main_redis
image: redis:3.2
restart: always
volumes:
- ./data/redis:/data
networks:
- proxy
labels:
- traefik.backend=main-redis
- traefik.default.protocol=http
- traefik.frontend.rule=Host:main-redis.company.dev
- traefik.docker.network=proxy
- traefik.port=6379
networks:
proxy:
external: true
2 - Docker 为我的 PHP 申请撰写。
version: '2'
services:
...
php:
container_name: myapp_php
build: ./docker/php # php:7.1-fpm base image
networks:
- internal
- proxy
labels:
- traefik.enable=false
- traefik.docker.network=proxy
expose:
- 9000
networks:
proxy:
external: true
internal:
external: false
我尝试将我的 php 应用程序连接到端口 6379
和 80
上的 main-redis.company.dev
,但我收到一条 Redis::connect(): connect() failed: Connection refused
消息。
我也在 redis.conf
中更改了这些内容:
注释行 bind 127.0.0.1
并将 protected-mode
更改为 no
我的 docker 容器在同一个网络中,所以我认为它应该可以工作。有谁知道我为什么会遇到这个问题?
首先,从您的 redis 服务定义中删除 traefik 标签,traefik 目前(2017 年 11 月)是一个 HTTP 代理,所以您不能那样公开端点
看这里:
https://github.com/containous/traefik/issues/10
https://github.com/containous/traefik/issues/1611
然后将 php 服务连接到 redis 服务,看起来您正试图在同一个 docker 实例(而不是外部)中执行此操作
而不是 main-redis.company.dev:6379,它应该像下面这样:
- redis:6379
- main_redis:6379
- %PROJECT_NAME%_redis:6379
取决于您部署容器的方式