使用traefik

时间:2017-11-03 17:37:50

标签: redis 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应用程序连接到main-redis.company.dev6379两个端口上的80,但我收到Redis::connect(): connect() failed: Connection refused消息。

我也在redis.conf中更改了这些内容: 评论bind 127.0.0.1行 并将protected-mode更改为no

我的docker容器停留在同一个网络中,所以我认为它应该可行。任何人都知道我为什么遇到这个问题?

1 个答案:

答案 0 :(得分:1)

首先,从您的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

取决于您如何部署容器