2017-09-11 5 views
12

के साथ गेटवे टाइमआउट मुझे ट्रैफिक के साथ मेलको सेट करने में कोई समस्या है, मुझे गेटवे टाइमआउट का सामना करना पड़ता है। मुझे अगली क्लाउड के साथ भी यह समस्या है, इसलिए मुझे वास्तव में दिलचस्पी होगी, गेटवे टाइमआउट के साथ इन मुद्दों का क्या कारण बनता है। मुझे लगता है कि इसे पोर्ट 9000 और PHP-fpm अपस्ट्रीम या sth के साथ करना है। लेकिन मैं निश्चित रूप से जानना चाहता हूं, और इससे कैसे निपटना है।traefik और php fpm

मेरे traefik.toml:

debug = true 
checkNewVersion = true 
defaultEntryPoints = ["http", "https"] 

[web] 
address = ":8080" 
[web.auth.basic] 
users = ["admin:undecipherablestring"] 

[entryPoints] 
    [entryPoints.http] 
    address = ":80" 
    [entryPoints.http.redirect] 
     entryPoint = "https" 
    [entryPoints.https] 
    address = ":443" 
    [entryPoints.https.tls] 

[acme] 
email = "[email protected]" 
storage = "acme.json" 
entryPoint = "https" 
onHostRule = true 

[[acme.domains]] 
    main = "main.com" 
    sans = ["monitor.main.com", "ports.main.com", "git.main.com", "cloud.main.com", "mail.main.com"] 

मेरे traefik डोकर-compose.yml:

version: '2' 
services: 
    proxy: 
    image: traefik 
    container_name: traefik 
    restart: always 
    command: |- 
     --docker 
     --docker.domain=docker.localhost 
     --logLevel=DEBUG 
    networks: 
     - webgateway 
    labels: 
     - "traefik.frontend.rule=Host: monitor.main.com" 
     - "traefik.port=8080" 
    ports: 
     - "80:80" 
     - "443:443" 
     - "8080:8080" 
    volumes: 
     - /var/run/docker.sock:/var/run/docker.sock 
     - ./traefik.toml:/traefik.toml 
     - ./acme.json:/acme.json 
     - acme:/opt/traefik/acme 

networks: 
    webgateway: 
    driver: bridge 

volumes: 
    acme: 
    driver: local 

मेरे mailcow डोकर-compose.yml:

version: '2.1' 
services: 

    unbound-mailcow: 
     image: mailcow/unbound:1.0 
     build: ./data/Dockerfiles/unbound 
     command: /usr/sbin/unbound 
     depends_on: 
     mysql-mailcow: 
      condition: service_healthy 
     healthcheck: 
     test: ["CMD", "nslookup", "google.com", "127.0.0.1"] 
     interval: 30s 
     timeout: 3s 
     retries: 10 
     volumes: 
     - ./data/conf/unbound/unbound.conf:/etc/unbound/unbound.conf:ro 
     restart: always 
     networks: 
     mailcow-network: 
      ipv4_address: 172.22.1.254 
      aliases: 
      - unbound 

    mysql-mailcow: 
     image: mariadb:10.1 
     command: mysqld --max_allowed_packet=128M 
     healthcheck: 
     test: ["CMD", "mysqladmin", "ping", "--host", "localhost", "--silent"] 
     interval: 5s 
     timeout: 5s 
     retries: 10 
     volumes: 
     - mysql-vol-1:/var/lib/mysql/ 
     - ./data/conf/mysql/:/etc/mysql/conf.d/:ro 
     environment: 
     - MYSQL_ROOT_PASSWORD=${DBROOT} 
     - MYSQL_DATABASE=${DBNAME} 
     - MYSQL_USER=${DBUSER} 
     - MYSQL_PASSWORD=${DBPASS} 
     restart: always 
     dns: 
     - 172.22.1.254 
     dns_search: mailcow-network 
     networks: 
     mailcow-network: 
      ipv4_address: 172.22.1.250 
      aliases: 
      - mysql 

    redis-mailcow: 
     image: redis:alpine 
     depends_on: 
     unbound-mailcow: 
      condition: service_healthy 
     volumes: 
     - redis-vol-1:/data/ 
     restart: always 
     dns: 
     - 172.22.1.254 
     dns_search: mailcow-network 
     networks: 
     mailcow-network: 
      ipv4_address: 172.22.1.249 
      aliases: 
      - redis 

    clamd-mailcow: 
     image: mailcow/clamd:1.1 
     build: ./data/Dockerfiles/clamd 
     restart: always 
     environment: 
     - SKIP_CLAMD=${SKIP_CLAMD:-n} 
     dns: 
     - 172.22.1.254 
     dns_search: mailcow-network 
     networks: 
     mailcow-network: 
      aliases: 
      - clamd 

    rspamd-mailcow: 
     image: mailcow/rspamd:1.3 
     build: ./data/Dockerfiles/rspamd 
     command: > 
     /bin/bash -c " 
     sleep 5; 
     /usr/bin/rspamd -f -u _rspamd -g _rspamd 
     " 
     depends_on: 
     - nginx-mailcow 
     volumes: 
     - ./data/conf/rspamd/override.d/:/etc/rspamd/override.d:ro 
     - ./data/conf/rspamd/local.d/:/etc/rspamd/local.d:ro 
     - ./data/conf/rspamd/lua/:/etc/rspamd/lua/:ro 
     - dkim-vol-1:/data/dkim 
     - rspamd-vol-1:/var/lib/rspamd 
     restart: always 
     dns: 
     - 172.22.1.254 
     dns_search: mailcow-network 
     hostname: rspamd 
     networks: 
     mailcow-network: 
      ipv4_address: 172.22.1.253 
      aliases: 
      - rspamd 

    php-fpm-mailcow: 
     image: mailcow/phpfpm:1.0 
     build: ./data/Dockerfiles/phpfpm 
     command: "php-fpm -d date.timezone=${TZ}" 
     depends_on: 
     - redis-mailcow 
     volumes: 
     - ./data/web:/web:ro 
     - ./data/conf/rspamd/dynmaps:/dynmaps:ro 
     - dkim-vol-1:/data/dkim 
     environment: 
     - DBNAME=${DBNAME} 
     - DBUSER=${DBUSER} 
     - DBPASS=${DBPASS} 
     - MAILCOW_HOSTNAME=${MAILCOW_HOSTNAME} 
     - IMAP_PORT=${IMAP_PORT:-143} 
     - IMAPS_PORT=${IMAPS_PORT:-993} 
     - POP_PORT=${POP_PORT:-110} 
     - POPS_PORT=${POPS_PORT:-995} 
     - SIEVE_PORT=${SIEVE_PORT:-4190} 
     - SUBMISSION_PORT=${SUBMISSION_PORT:-587} 
     - SMTPS_PORT=${SMTPS_PORT:-465} 
     - SMTP_PORT=${SMTP_PORT:-25} 
     restart: always 
     dns: 
     - 172.22.1.254 
     dns_search: mailcow-network 
     networks: 
     mailcow-network: 
      aliases: 
      - phpfpm 

    sogo-mailcow: 
     image: mailcow/sogo:1.3 
     build: ./data/Dockerfiles/sogo 
     depends_on: 
     unbound-mailcow: 
      condition: service_healthy 
     environment: 
     - DBNAME=${DBNAME} 
     - DBUSER=${DBUSER} 
     - DBPASS=${DBPASS} 
     - TZ=${TZ} 
     - MAILCOW_HOSTNAME=${MAILCOW_HOSTNAME} 
     volumes: 
     - ./data/conf/sogo/:/etc/sogo/ 
     restart: always 
     dns: 
     - 172.22.1.254 
     dns_search: mailcow-network 
     networks: 
     mailcow-network: 
      ipv4_address: 172.22.1.252 
      aliases: 
      - sogo 

    dovecot-mailcow: 
     image: mailcow/dovecot:1.4 
     build: ./data/Dockerfiles/dovecot 
     depends_on: 
     unbound-mailcow: 
      condition: service_healthy 
     volumes: 
     - ./data/conf/dovecot:/usr/local/etc/dovecot 
     - ./data/assets/ssl:/etc/ssl/mail/:ro 
     - ./data/conf/sogo/:/etc/sogo/ 
     - vmail-vol-1:/var/vmail 
     - crypt-vol-1:/mail_crypt/ 
     environment: 
     - DBNAME=${DBNAME} 
     - DBUSER=${DBUSER} 
     - DBPASS=${DBPASS} 
     ports: 
     - "${DOVEADM_PORT:-127.0.0.1:19991}:12345" 
     - "${IMAP_PORT:-143}:143" 
     - "${IMAPS_PORT:-993}:993" 
     - "${POP_PORT:-110}:110" 
     - "${POPS_PORT:-995}:995" 
     - "${SIEVE_PORT:-4190}:4190" 
     restart: always 
     dns: 
     - 172.22.1.254 
     dns_search: mailcow-network 
     hostname: ${MAILCOW_HOSTNAME} 
     networks: 
     mailcow-network: 
      aliases: 
      - dovecot 

    postfix-mailcow: 
     image: mailcow/postfix:1.2 
     build: ./data/Dockerfiles/postfix 
     depends_on: 
     unbound-mailcow: 
      condition: service_healthy 
     volumes: 
     - ./data/conf/postfix:/opt/postfix/conf 
     - ./data/assets/ssl:/etc/ssl/mail/:ro 
     - postfix-vol-1:/var/spool/postfix 
     - crypt-vol-1:/var/lib/zeyple 
     environment: 
     - DBNAME=${DBNAME} 
     - DBUSER=${DBUSER} 
     - DBPASS=${DBPASS} 
     ports: 
     - "${SMTP_PORT:-25}:25" 
     - "${SMTPS_PORT:-465}:465" 
     - "${SUBMISSION_PORT:-587}:587" 
     restart: always 
     dns: 
     - 172.22.1.254 
     dns_search: mailcow-network 
     hostname: ${MAILCOW_HOSTNAME} 
     networks: 
     mailcow-network: 
      aliases: 
      - postfix 

    memcached-mailcow: 
     image: memcached:alpine 
     depends_on: 
     unbound-mailcow: 
      condition: service_healthy 
     restart: always 
     dns: 
     - 172.22.1.254 
     dns_search: mailcow-network 
     networks: 
     mailcow-network: 
      aliases: 
      - memcached 

    nginx-mailcow: 
     depends_on: 
     - sogo-mailcow 
     - php-fpm-mailcow 
     image: nginx:mainline-alpine 
     healthcheck: 
     test: ["CMD", "ping", "php-fpm-mailcow", "-c", "5"] 
     interval: 5s 
     timeout: 5s 
     retries: 10 
     command: /bin/sh -c "envsubst </etc/nginx/conf.d/templates/listen_plain.template> /etc/nginx/conf.d/listen_plain.active && 
     envsubst </etc/nginx/conf.d/templates/listen_ssl.template> /etc/nginx/conf.d/listen_ssl.active && 
     envsubst </etc/nginx/conf.d/templates/server_name.template> /etc/nginx/conf.d/server_name.active && 
     nginx -g 'daemon off;'" 
     environment: 
     - HTTPS_PORT=${HTTPS_PORT:-443} 
     - HTTP_PORT=${HTTP_PORT:-80} 
     - MAILCOW_HOSTNAME=${MAILCOW_HOSTNAME} 
     volumes: 
     - ./data/web:/web:ro 
     - ./data/conf/rspamd/dynmaps:/dynmaps:ro 
     - ./data/assets/ssl/:/etc/ssl/mail/:ro 
     - ./data/conf/nginx/:/etc/nginx/conf.d/:rw 
     expose: 
     - "${HTTP_PORT:-80}"  
     #ports: 
     #- "${HTTPS_BIND:-0.0.0.0}:${HTTPS_PORT:-443}:${HTTPS_PORT:-443}" 
     #- "${HTTP_BIND:-0.0.0.0}:${HTTP_PORT:-80}:${HTTP_PORT:-80}" 
     restart: always 
     dns: 
     - 172.622.1.254 
     dns_search: mailcow-network 
     labels: 
     - "traefik.frontend.rule=Host: ${MAILCOW_HOSTNAME}" 
     - "traefik.backend=mailcow" 
     - "traefik.port=80" 
     - "traefik.frontend.entryPoints=http,https" 
     - "traefik.docker.network=traefik" 
     networks: 
     mailcow-network: 
      ipv4_address: 172.22.1.251 
      aliases: 
      - nginx 
     traefik: 

    acme-mailcow: 
     depends_on: 
     - nginx-mailcow 
     image: mailcow/acme:1.12 
     build: ./data/Dockerfiles/acme 
     dns: 
     - 172.22.1.254 
     dns_search: mailcow-network 
     environment: 
     - ADDITIONAL_SAN=${ADDITIONAL_SAN} 
     - MAILCOW_HOSTNAME=${MAILCOW_HOSTNAME} 
     - DBNAME=${DBNAME} 
     - DBUSER=${DBUSER} 
     - DBPASS=${DBPASS} 
     - SKIP_LETS_ENCRYPT=${SKIP_LETS_ENCRYPT:-n} 
     - SKIP_IP_CHECK=${SKIP_IP_CHECK:-n} 
     volumes: 
     - ./data/web/.well-known/acme-challenge:/var/www/acme:rw 
     - ./data/assets/ssl:/var/lib/acme/:rw 
     - ./data/assets/ssl-example:/var/lib/ssl-example/:ro 
     - /var/run/docker.sock:/var/run/docker.sock:ro 
     # do not restart the container too often. Things get worse when we hit let's encrypt's ratelimit. 
     restart: on-failure:1 
     networks: 
     mailcow-network: 
      aliases: 
      - acme 

    fail2ban-mailcow: 
     image: mailcow/fail2ban:1.5 
     build: ./data/Dockerfiles/fail2ban 
     depends_on: 
     - dovecot-mailcow 
     - postfix-mailcow 
     - sogo-mailcow 
     - php-fpm-mailcow 
     - redis-mailcow 
     restart: always 
     privileged: true 
     environment: 
     - TZ=${TZ} 
     - SKIP_FAIL2BAN=${SKIP_FAIL2BAN:-no} 
     network_mode: "host" 
     dns: 
     - 172.22.1.254 
     dns_search: mailcow-network 
     volumes: 
     - /lib/modules:/lib/modules:ro 

    ipv6nat: 
     image: robbertkl/ipv6nat 
     restart: always 
     privileged: true 
     network_mode: "host" 
     volumes: 
     - /var/run/docker.sock:/var/run/docker.sock:ro 
     - /lib/modules:/lib/modules:ro 

networks: 
    mailcow-network: 
    driver: bridge 
    enable_ipv6: true 
    ipam: 
     driver: default 
     config: 
     - subnet: 172.22.1.0/24 
     - subnet: fd4d:6169:6c63:6f77::/64 
    traefik: 
    external: 
     name: traefik_webgateway 

volumes: 
    vmail-vol-1: 
    mysql-vol-1: 
    dkim-vol-1: 
    redis-vol-1: 
    rspamd-vol-1: 
    postfix-vol-1: 
    crypt-vol-1: 
+0

Heyo reddit से serdmanczyk। मैंने एक नज़र डाली लेकिन यकीन नहीं, क्षमा करें: /। – Serdmanczyk

उत्तर

1

मुझे लगता है कि मुझे आपके द्वारा अनुभव किए जा रहे किसी भी मुद्दे के समान समस्या हो सकती है। इस GitHub मुद्दे पर एक नज़र डालें: https://github.com/containous/traefik/issues/979

हैं आपकी समस्या को मेरा रूप में ही है, यहाँ मुद्दा है:

Traefik एक "सामने वाला" नेटवर्क पर है, तो अपनी सेवाओं में से एक है, लेकिन वह सेवा "बैक फेस" नेटवर्क का हिस्सा भी है। डिफ़ॉल्ट रूप से Traefik, यह नहीं जानता कि कौन से नेटवर्क अनुरोध भेजना है ... इसलिए यह उन्हें दो आईपी पते विकल्पों में से एक यादृच्छिक रूप से चुने गए (उस कंटेनर के निर्माण पर उठाया गया)। यदि Traefik उस नेटवर्क का हिस्सा नहीं है, तो वह उस कंटेनर तक पहुंचने में सक्षम नहीं होगा, और आपको गेटवे टाइमआउट देगा।

समाधान: सीधे क्या नेटवर्क उस पर संवाद स्थापित किया जाना चाहिए Traefik को निर्दिष्ट करने के लिए अपने कंटेनर में लेबल जोड़ने:

labels: 
     - "traefik.enable=true" 
     - "traefik.docker.network=<folder prefix>webgateway" 
     - "traefik.backend=<backend service" 
     - "traefik.frontend.rule=Host:<host setting>" 

प्रो टिप: docker network ls का उपयोग यह पता लगाने की क्या वास्तविक अपने नेटवर्क का नाम है , क्योंकि फाइल में डॉकर-कंपोज़ कहता है कि यह नहीं है। वास्तविक नेटवर्क नाम उस फ़ोल्डर के नाम पर आधारित है जिसे वह चलाया जाता है। (मुझे नहीं पता कि क्यों, और मुझे यह पसंद नहीं है, लेकिन वह दुनिया है जिसमें हम रहते हैं)

इसलिए मेरे उपरोक्त उदाहरण में <folder prefix>

+0

'-" traefik.docker.network = traefik "' मैंने पहले से ही नेटवर्क निर्दिष्ट किया है, क्योंकि मुझे पहले से ही इस मुद्दे पर एक नज़र डाली गई है।यह अभी भी काम नहीं करता है, सवाल भी मेरे लिए है, जो कंटेनरों को इस नेटवर्क में होना चाहिए। – metanerd

+0

ट्रेफ़िक से बात करने की आवश्यकता वाले सभी कंटेनर को इस नेटवर्क पर होना आवश्यक है। साथ ही, सुनिश्चित करें कि आप 'डॉकर नेटवर्क ls' चलाते हैं, क्योंकि आपका वास्तविक नेटवर्क नाम "traefik" के रूप में उतना आसान नहीं होगा, डॉकर-कंपोज़ कमांड नाम बदलता है, उस फ़ोल्डर नाम को उपसर्ग कर रहा है जिसे आप कमांड चला रहे हैं। अपने लेबल में उस वास्तविक नेटवर्क नाम का प्रयोग करें। – CenterOrbit

+0

आदमी, यह था! मेरे साथ इतनी लगातार होने के लिए धन्यवाद। यह कमबख्त काम करता है! मुझे एहसास नहीं हुआ कि मुझे बाहरी नेटवर्क नाम निर्दिष्ट करना था, न कि traefik के लिए आंतरिक एक। अरे, मुझे इतना बेवकूफ! अनेक अनेक धन्यवाद! – metanerd

3

मैं इस मुद्दे को लगता है traefik समुदाय द्वारा हल किया गया है। आप इसे देख सकते हैं: https://github.com/containous/traefik/pull/1873

+0

नहीं, मुझे अभी भी गेटवे टाइमआउट प्राप्त होता है और इसमें कोई संकेत नहीं है कि यह क्यों हो रहा है। – metanerd

+0

मैं आपको बक्षीस दूंगा, क्योंकि यह समाप्त हो जाएगा, लेकिन यह मेरे प्रश्न का उत्तर नहीं देता है। – metanerd

+0

आपको बहुत बहुत धन्यवाद। मैं अभी भी उस पर खुदाई कर रहा हूँ। मुझे आशा है कि मैं मदद कर सकता हूं। –

1

मैं जो करता हूं उसे .env नामक फ़ाइल में परिभाषित किया गया है, उसी नाम में docker-compose.yml प्रोजेक्ट नाम के लिए एक चर (जो सभी कंटेनर/नेटवर्क/आदि के लिए उपसर्ग के रूप में समाप्त होता है)। यह केवल अक्षर, कोई रिक्त स्थान, डैश, आदि को शामिल करना चाहिए

COMPOSE_PROJECT_NAME=myproject 

फिर, अपने आवेदन लेबल में, आप चर नाम "_" द्वारा अलग बनाया नेटवर्क के साथ संलग्न का उपयोग करें:

- "traefik.docker.network=${COMPOSE_PROJECT_NAME}_mynetwork" 
संबंधित मुद्दे