2016-12-14 100 views
3

我試圖在Docker主機中設置HAProxy。使用HAProxy和Docker進行動態DNS解析

使用HAProxy的1.7和碼頭工人1.12

我haproxy.cfg樣子:

# Simple configuration for an HTTP proxy listening on port 81 on all 
# interfaces and forwarding requests to a single backend "servers" with a 
# single server "server1" listening on 127.0.0.1:8000 
global 
    daemon 
    maxconn 256 

resolvers docker 
    # nameserver dnsmasq 127.0.0.1:53 
    nameserver dns 127.0.0.1:53 

defaults 
    mode http 
    timeout connect 5000ms 
    timeout client 50000ms 
    timeout server 50000ms 
    default-server init-addr none 

frontend http-in 
    bind *:80 
    default_backend www_somedomain1_com 

    # Define hosts 
    acl host_www_somedomain1_com hdr(host) -i somedomain1.com 
    acl host_www_somedomain1_com hdr(host) -i www.somedomain1.com 
    acl host_www_somedomain2_com hdr(host) -i www.somedomain2.com 

    ## figure out which one to use 
    use_backend www_somedomain1_com if host_www_somedomain1_com 
    use_backend www_somedomain2_com if host_www_somedomain2_com 

backend www_somedomain1_com 
    # Utilizing the Docker DNS to resolve below host 
    # server server1 www-somedomain1-com maxconn 32 check port 80 
    server server1 www-somedomain1-com resolvers docker check maxconn 32 

backend www_somedomain2_com 
    # Utilizing the Docker DNS to resolve below host 
    # server server1 www-somedomain2-com maxconn 32 check resolvers docker resolve-prefer ipv4 
    server server1 www-somedomain2-com maxconn 32 check port 80 

我想用多克的嵌入式DNS系統 - 這,在我的理解,只使用一個用戶時啓用定義網絡。

所以我創建了一個網絡(使用默認的橋式驅動器)

docker network create mynetwork 

當我跑我的兩個命名泊塢窗的容器,(我-HAProxy的和WWW-somedomain1-COM),我將它們添加到網絡--net標誌。

泊塢窗運行命令:

docker run --name myhaproxy --net mynetwork -p 80:80 -d haproxy 
docker run --name www-somedomain1-com --net mynetwork -d nginx 

我知道泊塢DNS是功能性的,因爲我可以從一個容器解析到其他的時候我在bash shell上他們跳。我無法在HAProxy中獲得正確的組合/配置以啓用動態DNS解析。

HAProxy的統計頁面始終顯示下游後端爲棕色/解析問題....

一些事情幫助: - 「默認服務器的init-地址無」有助於通過HAProxy的配置檢查啓動。

任何指導非常感謝!

+0

您可以發佈您'泊塢窗run'命令?任何你沒有使用docker-compose這個環境的理由? – jmiraglia

+0

你可以在容器內運行dig/nslookup嗎? – Baptiste

+0

你也可以在套接字上發佈「show stat resolvers」以獲得DNS解析統計信息的轉儲,我們可以看到報告了哪種類型的errros – Baptiste

回答

0

我也在項目中使用nginx和haproxy。既然你可能會開始使用docker-compose,我想我會爲此發佈我的docker-compose.yaml。

version: "2" 

networks: 
    main: 

volumes: 
    jsdoc-data: 
    driver: local 
    coverage-data: 
    driver: local 

services: 
    nginx: 
    build: ../nginx 
    depends_on: 
     - haproxy 
    networks: 
     - main 
    ports: 
     - 80:80 
     - 443:443 
    volumes: 
     - jsdoc-data:/www/jsdoc 
     - coverage-data:/www/coverage 

    haproxy: 
    image: dockercloud/haproxy:1.5.3 
    ports: 
     - 80 
     - 1936:1936 
    links: 
     - app 
    networks: 
     - main 
    volumes: 
     - /var/run/docker.sock:/var/run/docker.sock 
    environment: 
     - MODE=http 
     - STATS_PORT=1936 
     - STATS_AUTH=username:password 
3

我覺得你的問題是,你正在使用127.0.0.1:53爲您解析DNS,當它需要127.0.0.11:53爲泊塢窗橋接網絡。

這裏是我的dev的搬運工東西HAProxy的設置:

global 
    quiet 

defaults 
    log global 
    mode http 
    option forwardfor 
    timeout connect 60s 
    timeout client 60s 
    timeout server 60s 
    default-server init-addr none 

resolvers docker_resolver 
    nameserver dns 127.0.0.11:53 

frontend https-proxy 
    bind 0.0.0.0:80 
    bind 0.0.0.0:443 ssl crt /usr/local/etc/haproxy/dev_server.pem 
    redirect scheme https if !{ ssl_fc } 

    acl is_api_server hdr(host) -i mywebsite 

    use_backend api_server if is_api_server 

backend api_server 
    server haproxyapi api-server-dev:80 check inter 10s resolvers docker_resolver resolve-prefer ipv4