docker - 如何使用docker-compose使Traefik成为反向代理?

标签 docker docker-compose traefik

我在apache上使用symfony进行docker-compose构建,在nginx上使用angular进行构建。有可能可以运行更多的docker-composition,因此现在我想使用traefik来创建自己的DNS-我想设置每个应用程序的主机名,进行docker-compose并在主机就绪时使用主机名解析应用程序。

Traefik docker-撰写:

version: '3.1'

networks:
  proxy:
    external: true
  internal:
    external: false

services:
  traefik:
    image: traefik:v2.1
    command: --api.insecure=true --providers.docker
    labels:
      - traefik.frontend.rule=Host:monitor.docker.localhost
      - traefik.port=8080
    networks:
      - proxy
    ports:
      - 80:80
      - 8080:8080
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

应用docker-compose:
# Run docker-compose build
# Run docker-compose up
# Live long and prosper

version: '3.1'
networks:
  proxy:
   external: true
  internal:
   external: false
services:
    apache:
        build: .docker/apache
        container_name: sf4_apache
        volumes:
          - .docker/config/vhosts:/etc/apache2/sites-enabled
          - ./backend:/home/wwwroot/sf4
        depends_on:
          - php
        labels:
          - traefik.http.routers.sf4_apache.rule=Host(`symfony.docker.localhost`)
          - traefik.http.services.apache.loadbalancer.server.port=80
        networks:
         - internal
         - proxy   

    php:
        build: .docker/php
        container_name: sf4_php
        volumes:
          - ./backend:/home/wwwroot/sf4
          - ./executor:/home/wwwroot/pipe
        networks:
         - internal
        labels:
         - traefik.enable=false  


    nginx:
      container_name: angular_nginx
      build: .docker/nginx
      volumes:
        - ./frontend/dist/frontend:/usr/share/nginx/html
      ports:
        - "81:80"
        - "443:443"
      labels:
        - traefik.http.routers.angular_nginx.rule=Host(`angular.docker.localhost`)
      networks:
        - internal
        - proxy     
    node:
        build: .docker/node
        container_name: angular_node
        ports:
            - 4200:4200
        volumes:
            - ./frontend:/home/node/app/frontend
        tty: true
        command:
            - /bin/sh
            - -c
            - |
                cd /home/node/app/frontend && npm start
        expose:
            - "4200"   
        networks:
         - internal
        labels:
         - traefik.enable=false     

无法使其正常工作:有时我在域(symfony.docker.localhost)上访问了Bad Gateway,有时由于两台服务器都使用一个端口而崩溃了,所以请帮助我正确运行

最佳答案

首先,在版本2.1中弃用了docker前端和后端,请检查此link

这是在traefik 2.1中执行相同操作的示例

version: '3.7'

networks:
  traefik:
    external: true

volumes:
  db_data:

services:

  proxy:
    image: traefik:v2.1
    command:
      - '--providers.docker=true'
      - '--entryPoints.web.address=:80'
      - '--providers.providersThrottleDuration=2s'
      - '--providers.docker.watch=true'
      - '--providers.docker.swarmMode=true'
      - '--providers.docker.swarmModeRefreshSeconds=15s'
      - '--providers.docker.exposedbydefault=false'
      - '--providers.docker.defaultRule=Host("local.me")'
      - '--accessLog.bufferingSize=0'
      - '--api=true'
      - '--api.dashboard=true'
      - '--api.insecure=true'
      - '--ping.entryPoint=web'
    volumes:
      - '/var/run/docker.sock:/var/run/docker.sock:ro'
    ports:
      - '80:80'
      - '8080:8080'
    deploy:
      restart_policy:
        condition: any
        delay: 5s
        max_attempts: 3
        window: 120s
      update_config:
        delay: 10s
        order: start-first
        parallelism: 1
      rollback_config:
        parallelism: 0
        order: stop-first
    logging:
      driver: json-file
      options:
        'max-size': '10m'
        'max-file': '5'
    networks:
      - traefik

  mysql:
    image: mysql:5.7
    command: mysqld --general-log=1 --general-log-file=/var/log/mysql/general-log.log
    deploy:
      restart_policy:
        condition: any
        delay: 5s
        max_attempts: 3
        window: 120s
      update_config:
        delay: 10s
        order: start-first
        parallelism: 1
      rollback_config:
        parallelism: 0
        order: stop-first
    logging:
      driver: json-file
      options:
        'max-size': '10m'
        'max-file': '5'
    networks:
      - traefik
    volumes:
      - db_data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: dummy
      MYSQL_DATABASE: rails_blog_production

  rails_blog_web:
    image: wshihadeh/rails_blog:demo-v1
    command: 'web'
    deploy:
      labels:
        - traefik.enable=true
        - traefik.http.services.blog.loadbalancer.server.port=8080
        - traefik.http.routers.blog.rule=Host(`blog.local.me`)
        - traefik.http.routers.blog.service=blog
        - traefik.http.routers.blog.entrypoints=web
        - traefik.docker.network=traefik
      restart_policy:
        condition: any
        delay: 5s
        max_attempts: 3
        window: 120s
      update_config:
        delay: 10s
        order: start-first
        parallelism: 1
      rollback_config:
        parallelism: 0
        order: stop-first
    logging:
      driver: json-file
      options:
        'max-size': '10m'
        'max-file': '5'
    networks:
      - traefik
    depends_on:
      - mysql
    environment:
      DATABASE_URL: mysql2://root:dummy@mysql/rails_blog_production
      RAILS_SERVE_STATIC_FILES: 'true'

有关更多信息,您可以检查此blog post

关于docker - 如何使用docker-compose使Traefik成为反向代理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60729368/

相关文章:

asp.net - 在 Docker 容器 ASP.NET 应用程序中集成 Windows 身份验证

docker - Pod "mysql"被禁止 : no API token found for service account default/default

Docker Redis : Version "6.0.8" in ".\docker-compose.yml" is invalid

mongodb - 在docker compose容器中挂载mongo数据的主机卷

traefik - Traefik 后面的 Cockpit 上存在 ERR_TOO_MANY_REDIRECTS

traefik - Traefik 中是否有等效于 Apache 的 ReverseProxyPass?

macos - Docker Perl Sublimetext3 开发设置

docker - Selenium Java自动化测试:在Gitlab CI中启动docker-compose并运行gradle test发生异常

docker - 在服务器上的docker-compose上使用代理

kubernetes - 如何将 70% 流量路由到ExternalName 服务并附加 url?