{"id":1260,"date":"2022-10-06T07:43:52","date_gmt":"2022-10-06T07:43:52","guid":{"rendered":"https:\/\/mklasen.com\/?p=1260"},"modified":"2022-10-06T07:44:07","modified_gmt":"2022-10-06T07:44:07","slug":"make-a-service-available-on-a-different-port-in-docker-compose-with-traefik","status":"publish","type":"post","link":"https:\/\/mklasen.com\/make-a-service-available-on-a-different-port-in-docker-compose-with-traefik\/","title":{"rendered":"Make a service available on a different port in docker-compose with Traefik"},"content":{"rendered":"\n

This is one of these things that I broke my head around a couple of times. And every time I need to do this, it takes me a fair amount of trial and error before solving it. Let’s get that over once and for all.<\/strong><\/p>\n\n\n\n

(seriously, i’ll probably Google for this issue in about 6 months and find my own blog article)<\/em><\/p>\n\n\n\n

Alright, so in this specific situation, I want to make my mailhog service available with a custom domain, that way, I can just type ‘mail.c7’ in the address bar and see e-mails of all my docker containers coming in. Great for testing purposes!<\/p>\n\n\n\n

There’s a couple of rules we need to set for this, but let’s first have a look a the full docker-compose file:<\/p>\n\n\n\n

version: \"3\"\n\nservices:\n  catchall:\n    container_name: catchall\n    image: mailhog\/mailhog:latest\n    user: \"1000:1000\"\n    logging:\n      driver: 'none'  # disable saving logs\n    expose:\n      - 8025\n      - 1025\n    labels:\n      - \"traefik.enable=true\"\n      - \"traefik.docker.network=traefik_proxy\"\n      - \"traefik.http.routers.mail.rule=Host(`mail.c7`)\"\n      - \"traefik.http.routers.mail.tls=true\"\n      - \"traefik.http.services.mail.loadbalancer.server.port=8025\"\n    restart: always\n\nnetworks:\n  default:\n    external:\n      name: traefik_proxy<\/code><\/pre>\n\n\n\n

You can probably guess which rules are of importance here, it’s these ones:<\/p>\n\n\n\n

      - \"traefik.enable=true\"\n      - \"traefik.docker.network=traefik_proxy\"\n      - \"traefik.http.routers.mail.rule=Host(`mail.c7`)\"\n      - \"traefik.http.routers.mail.tls=true\"\n      - \"traefik.http.services.mail.loadbalancer.server.port=8025\"<\/code><\/pre>\n\n\n\n

But, most importantly, it’s the loadbalancer one. So, Mailhog makes the web interface available via 8025. By setting the loadbalancer rule and defining port 8025, we make the service available for http\/https traffic.<\/p>\n\n\n\n

Mind that it’s important to use the same name for the routers and services, we’re using mail<\/strong> in the example above.<\/p>\n\n\n\n

The Traefik docker-compose file<\/h2>\n\n\n\n

The blog wouldn’t be complete with an example of the main Traefik docker-compose file, you’ll find it below:<\/p>\n\n\n\n

version: \"3.3\"\n\nservices:\n\n  traefik:\n    image: \"traefik:v2.8\"\n    container_name: \"traefik\"\n    restart: always\n    command:\n      #- \"--log.level=DEBUG\"\n      - \"--api.insecure=true\"\n      - \"--providers.docker=true\"\n      - \"--providers.docker.exposedbydefault=false\"\n      - '--providers.docker.watch=true'\n      - \"--providers.file.directory=\/etc\/traefik\"\n      - \"--entrypoints.websecure.address=:443\"\n      - \"--entrypoints.web.address=:80\"\n      - \"--entrypoints.web.http.redirections.entryPoint.to=websecure\"\n      - \"--entrypoints.web.http.redirections.entryPoint.scheme=https\"\n      - \"--entrypoints.web.http.redirections.entrypoint.permanent=true\"\n    ports:\n      - \"80:80\"\n      - \"443:443\"\n      - \"8080:8080\"\n    volumes:\n      - \"\/var\/run\/docker.sock:\/var\/run\/docker.sock:ro\"\n      - \".\/certs:\/etc\/certs:ro\"\n      - \".\/config\/:\/etc\/traefik\/\"\n    networks:\n      default:\n        ipv4_address: 172.24.0.19\n\nnetworks:\n  default:\n    external:\n      name: traefik_proxy<\/code><\/pre>\n\n\n\n

Alright, hope that makes sense!<\/p>\n\n\n\n

Happy developing!<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"

This is one of these things that I broke my head around a couple of times. And every time I need to do this, it takes me a fair amount of trial and error before solving it. Let’s get that over once and for all. (seriously, i’ll probably Google for this issue in about 6 […]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[1],"tags":[],"acf":[],"yoast_head":"\nMake a service available on a different port in docker-compose with Traefik - Marinus Klasen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/mklasen.com\/make-a-service-available-on-a-different-port-in-docker-compose-with-traefik\/\" \/>\n<meta property=\"og:locale\" content=\"nl_NL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Make a service available on a different port in docker-compose with Traefik - Marinus Klasen\" \/>\n<meta property=\"og:description\" content=\"This is one of these things that I broke my head around a couple of times. And every time I need to do this, it takes me a fair amount of trial and error before solving it. Let’s get that over once and for all. (seriously, i’ll probably Google for this issue in about 6 […]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/mklasen.com\/make-a-service-available-on-a-different-port-in-docker-compose-with-traefik\/\" \/>\n<meta property=\"og:site_name\" content=\"Marinus Klasen\" \/>\n<meta property=\"article:publisher\" content=\"http:\/\/facebook.com\/marinus.klasen\" \/>\n<meta property=\"article:author\" content=\"http:\/\/facebook.com\/marinus.klasen\" \/>\n<meta property=\"article:published_time\" content=\"2022-10-06T07:43:52+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-10-06T07:44:07+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/mklasen.com\/content\/uploads\/2020\/03\/cropped-cropped-mklasen-logo-margin-1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"512\" \/>\n\t<meta property=\"og:image:height\" content=\"512\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Marinus Klasen\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@http:\/\/twitter.com\/marinusklasen\" \/>\n<meta name=\"twitter:site\" content=\"@marinusklasen\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Marinus Klasen\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/mklasen.com\/make-a-service-available-on-a-different-port-in-docker-compose-with-traefik\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/mklasen.com\/make-a-service-available-on-a-different-port-in-docker-compose-with-traefik\/\"},\"author\":{\"name\":\"Marinus Klasen\",\"@id\":\"https:\/\/mklasen.com\/#\/schema\/person\/bbad02776afb72dfba2ebfe1956a4e29\"},\"headline\":\"Make a service available on a different port in docker-compose with Traefik\",\"datePublished\":\"2022-10-06T07:43:52+00:00\",\"dateModified\":\"2022-10-06T07:44:07+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/mklasen.com\/make-a-service-available-on-a-different-port-in-docker-compose-with-traefik\/\"},\"wordCount\":244,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/mklasen.com\/#\/schema\/person\/bbad02776afb72dfba2ebfe1956a4e29\"},\"articleSection\":[\"General\"],\"inLanguage\":\"nl-NL\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/mklasen.com\/make-a-service-available-on-a-different-port-in-docker-compose-with-traefik\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/mklasen.com\/make-a-service-available-on-a-different-port-in-docker-compose-with-traefik\/\",\"url\":\"https:\/\/mklasen.com\/make-a-service-available-on-a-different-port-in-docker-compose-with-traefik\/\",\"name\":\"Make a service available on a different port in docker-compose with Traefik - Marinus Klasen\",\"isPartOf\":{\"@id\":\"https:\/\/mklasen.com\/#website\"},\"datePublished\":\"2022-10-06T07:43:52+00:00\",\"dateModified\":\"2022-10-06T07:44:07+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/mklasen.com\/make-a-service-available-on-a-different-port-in-docker-compose-with-traefik\/#breadcrumb\"},\"inLanguage\":\"nl-NL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/mklasen.com\/make-a-service-available-on-a-different-port-in-docker-compose-with-traefik\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/mklasen.com\/make-a-service-available-on-a-different-port-in-docker-compose-with-traefik\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/mklasen.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"General\",\"item\":\"https:\/\/mklasen.com\/general\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Make a service available on a different port in docker-compose with Traefik\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/mklasen.com\/#website\",\"url\":\"https:\/\/mklasen.com\/\",\"name\":\"Marinus Klasen\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/mklasen.com\/#\/schema\/person\/bbad02776afb72dfba2ebfe1956a4e29\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/mklasen.com\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"nl-NL\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/mklasen.com\/#\/schema\/person\/bbad02776afb72dfba2ebfe1956a4e29\",\"name\":\"Marinus Klasen\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\/\/mklasen.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/mklasen.com\/content\/uploads\/2021\/01\/DONE1171.jpg\",\"contentUrl\":\"https:\/\/mklasen.com\/content\/uploads\/2021\/01\/DONE1171.jpg\",\"width\":1500,\"height\":1000,\"caption\":\"Marinus Klasen\"},\"logo\":{\"@id\":\"https:\/\/mklasen.com\/#\/schema\/person\/image\/\"},\"description\":\"Marinus has been working in software\/web development for more than a decade. Since 2020 his attention shifted on sharing knowledge and developing products and tools for sharing knowledge. Marinus Klasen on Twitter\",\"sameAs\":[\"http:\/\/facebook.com\/marinus.klasen\",\"https:\/\/nl.linkedin.com\/in\/marinusklasen\",\"https:\/\/twitter.com\/http:\/\/twitter.com\/marinusklasen\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Make a service available on a different port in docker-compose with Traefik - Marinus Klasen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/mklasen.com\/make-a-service-available-on-a-different-port-in-docker-compose-with-traefik\/","og_locale":"nl_NL","og_type":"article","og_title":"Make a service available on a different port in docker-compose with Traefik - Marinus Klasen","og_description":"This is one of these things that I broke my head around a couple of times. And every time I need to do this, it takes me a fair amount of trial and error before solving it. Let’s get that over once and for all. (seriously, i’ll probably Google for this issue in about 6 […]","og_url":"https:\/\/mklasen.com\/make-a-service-available-on-a-different-port-in-docker-compose-with-traefik\/","og_site_name":"Marinus Klasen","article_publisher":"http:\/\/facebook.com\/marinus.klasen","article_author":"http:\/\/facebook.com\/marinus.klasen","article_published_time":"2022-10-06T07:43:52+00:00","article_modified_time":"2022-10-06T07:44:07+00:00","og_image":[{"width":512,"height":512,"url":"https:\/\/mklasen.com\/content\/uploads\/2020\/03\/cropped-cropped-mklasen-logo-margin-1.png","type":"image\/png"}],"author":"Marinus Klasen","twitter_card":"summary_large_image","twitter_creator":"@http:\/\/twitter.com\/marinusklasen","twitter_site":"@marinusklasen","twitter_misc":{"Written by":"Marinus Klasen","Est. reading time":"2 minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/mklasen.com\/make-a-service-available-on-a-different-port-in-docker-compose-with-traefik\/#article","isPartOf":{"@id":"https:\/\/mklasen.com\/make-a-service-available-on-a-different-port-in-docker-compose-with-traefik\/"},"author":{"name":"Marinus Klasen","@id":"https:\/\/mklasen.com\/#\/schema\/person\/bbad02776afb72dfba2ebfe1956a4e29"},"headline":"Make a service available on a different port in docker-compose with Traefik","datePublished":"2022-10-06T07:43:52+00:00","dateModified":"2022-10-06T07:44:07+00:00","mainEntityOfPage":{"@id":"https:\/\/mklasen.com\/make-a-service-available-on-a-different-port-in-docker-compose-with-traefik\/"},"wordCount":244,"commentCount":0,"publisher":{"@id":"https:\/\/mklasen.com\/#\/schema\/person\/bbad02776afb72dfba2ebfe1956a4e29"},"articleSection":["General"],"inLanguage":"nl-NL","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/mklasen.com\/make-a-service-available-on-a-different-port-in-docker-compose-with-traefik\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/mklasen.com\/make-a-service-available-on-a-different-port-in-docker-compose-with-traefik\/","url":"https:\/\/mklasen.com\/make-a-service-available-on-a-different-port-in-docker-compose-with-traefik\/","name":"Make a service available on a different port in docker-compose with Traefik - Marinus Klasen","isPartOf":{"@id":"https:\/\/mklasen.com\/#website"},"datePublished":"2022-10-06T07:43:52+00:00","dateModified":"2022-10-06T07:44:07+00:00","breadcrumb":{"@id":"https:\/\/mklasen.com\/make-a-service-available-on-a-different-port-in-docker-compose-with-traefik\/#breadcrumb"},"inLanguage":"nl-NL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/mklasen.com\/make-a-service-available-on-a-different-port-in-docker-compose-with-traefik\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/mklasen.com\/make-a-service-available-on-a-different-port-in-docker-compose-with-traefik\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/mklasen.com\/"},{"@type":"ListItem","position":2,"name":"General","item":"https:\/\/mklasen.com\/general\/"},{"@type":"ListItem","position":3,"name":"Make a service available on a different port in docker-compose with Traefik"}]},{"@type":"WebSite","@id":"https:\/\/mklasen.com\/#website","url":"https:\/\/mklasen.com\/","name":"Marinus Klasen","description":"","publisher":{"@id":"https:\/\/mklasen.com\/#\/schema\/person\/bbad02776afb72dfba2ebfe1956a4e29"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/mklasen.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"nl-NL"},{"@type":["Person","Organization"],"@id":"https:\/\/mklasen.com\/#\/schema\/person\/bbad02776afb72dfba2ebfe1956a4e29","name":"Marinus Klasen","image":{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/mklasen.com\/#\/schema\/person\/image\/","url":"https:\/\/mklasen.com\/content\/uploads\/2021\/01\/DONE1171.jpg","contentUrl":"https:\/\/mklasen.com\/content\/uploads\/2021\/01\/DONE1171.jpg","width":1500,"height":1000,"caption":"Marinus Klasen"},"logo":{"@id":"https:\/\/mklasen.com\/#\/schema\/person\/image\/"},"description":"Marinus has been working in software\/web development for more than a decade. Since 2020 his attention shifted on sharing knowledge and developing products and tools for sharing knowledge. Marinus Klasen on Twitter","sameAs":["http:\/\/facebook.com\/marinus.klasen","https:\/\/nl.linkedin.com\/in\/marinusklasen","https:\/\/twitter.com\/http:\/\/twitter.com\/marinusklasen"]}]}},"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","featured_image_src":null,"featured_image_src_square":null,"author_info":{"display_name":"Marinus Klasen","author_link":"https:\/\/mklasen.com\/author\/mklasen\/"},"_links":{"self":[{"href":"https:\/\/mklasen.com\/wp-json\/wp\/v2\/posts\/1260"}],"collection":[{"href":"https:\/\/mklasen.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mklasen.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mklasen.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mklasen.com\/wp-json\/wp\/v2\/comments?post=1260"}],"version-history":[{"count":1,"href":"https:\/\/mklasen.com\/wp-json\/wp\/v2\/posts\/1260\/revisions"}],"predecessor-version":[{"id":1261,"href":"https:\/\/mklasen.com\/wp-json\/wp\/v2\/posts\/1260\/revisions\/1261"}],"wp:attachment":[{"href":"https:\/\/mklasen.com\/wp-json\/wp\/v2\/media?parent=1260"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mklasen.com\/wp-json\/wp\/v2\/categories?post=1260"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mklasen.com\/wp-json\/wp\/v2\/tags?post=1260"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}