title: Using Traefik 2 as TCP proxy for MariaDB (Docker)
body: <p>I am trying to use Traefik as a reverse proxy for MariaDB so I can connect from my Client.</p>
  
  <p>Currently Traefik is working fine with HTTP and HTTPS for multiple WordPress Container but i am having trouble configuring it for MariaDB.</p>
  
  <p>Here is the current config:</p>
  
  <p>Traefik Compose File:</p>
  
  <pre><code>version: '3.5'
  
   networks:
    traefik:
      name: traefik
  
  
  services:
    traefik:
      image: traefik:latest
      restart: always
      container_name: traefik
      volumes:
        - /etc/localtime:/etc/localtime:ro
        - /var/run/docker.sock:/var/run/docker.sock:ro
        - ./traefik.toml:/traefik.toml:ro
        - ./acme.json:/acme.json
      ports:
        - 80:80
        - 443:443
        - 3306:3306
      labels:
        - "traefik.enable=true"
        - "traefik.http.routers.traefik.rule=Host(`traefik.local`)"
        - "traefik.http.routers.traefik.entrypoints=websecure"
        - "traefik.http.routers.traefik.service=api@internal"
        - "traefik.http.routers.traefik.middlewares=auth"
        - "traefik.http.middlewares.auth.basicauth.users=username:$$apr1$$j994eiLb$$KmPfiii4e9VkZwTPW2/RF1"
      networks:
        - traefik
  </code></pre>
  
  <p>Traefik Configuration File (traefik.toml):</p>
  
  <pre><code># Network traffic will be entering our Docker network on the usual web ports
  # (ie, 80 and 443), where Traefik will be listening.
  [entyPoints]
    [entryPoints.web]
      address = ":80"
  
    [entryPoints.websecure]
      address= ":443"
      [entryPoints.websecure.http.tls]
        certResolver = "resolver"
  
  #  [entryPoints.ssh]
  #    address = ":2222"
  
    [entryPoints.mariadb]
      address = ":3306"
  
      #Redirection from HTTP to HTTPS
      [entryPoints.web.http]
        [entryPoints.web.http.redirections]
          [entryPoints.web.http.redirections.entryPoint]
          to = "websecure"
          scheme = "https"
  
  
  #Integration with Let's Encrypt
  [certificatesResolvers.resolver.acme]
    email = "service@local"
    storage = "acme.json"
    [certificatesResolvers.resolver.acme.tlsChallenge]
  
  #[log]
  #  level = "DEBUG"
  
  
  [api]
    #Defaul=true
    dashboard = true
  
  
  # Enable retry sending request if network error
  [retry]
  
  
  # These options are for Traefik's integration with Docker.
  [providers.docker]
    endpoint = "unix:///var/run/docker.sock"
    exposedByDefault = false
    network = "traefik"
  </code></pre>
  
  <p>MariaDB Compose File:
      version: '3.5'</p>
  
  <pre><code>networks:
    traefik:
      external:
        name: traefik
  
  
  services:
    dbtest:
      image: mariadb:latest
      restart: always
      container_name: dbtest
      environment:
        - MYSQL_DATABASE=admin
        - MYSQL_USER=admin
        - MYSQL_PASSWORD=admin
        - MYSQL_ROOT_PASSWORD=admin
      networks:
        - traefik
      labels:
        - "traefik.enable=true"
        - "traefik.docker.network=traefik"
        - "traefik.tcp.routers.mariadb.entrypoints=mariadb"
        - "traefik.tcp.routers.mariadb.rule=HostSNI(`test.local`)"
        - "traefik.tcp.routers.mariadb.tls=true"
  #      - "traefik.tcp.routers.mariadb.service=dbtest"
  #      - "traefik.tcp.services.mariadb.loadbalancer.server.port=3306"
  </code></pre>
  
  <p>When I try to connect to the database from my Client it doesn't work</p>
  
  <p>Anyone having experience or a good example for that?</p>