1. The problem I’m having:
I try to run portainer in a docker container behind caddy, also in a docker container.
Accessing portainer via http://dockerhost.local:9000 or https://dockerhost.local:9443 works, so portainer should be fine.
When trying to access portainer via https://admin.lab.htl-villach.at, portainer stalls with “Portainer loading …”
Note that admin.lab.htl-villach.at is not reachable from the internet.
Accessing a NGINX instance via the same caddy works fine. Letsenrypt certs are also fine.
2. Error messages and/or full log output:
curl -vl https://admin.lab.htl-villach.at
* Rebuilt URL to: https://admin.lab.htl-villach.at/
* Trying 172.31.32.110...
* TCP_NODELAY set
* Connected to admin.lab.htl-villach.at (172.31.32.110) port 443 (#0)
* schannel: SSL/TLS connection with admin.lab.htl-villach.at port 443 (step 1/3)
* schannel: checking server certificate revocation
* schannel: sending initial handshake data: sending 195 bytes...
* schannel: sent initial handshake data: sent 195 bytes
* schannel: SSL/TLS connection with admin.lab.htl-villach.at port 443 (step 2/3)
* schannel: encrypted data got 4096
* schannel: encrypted data buffer: offset 4096 length 4096
* schannel: encrypted data length: 194
* schannel: encrypted data buffer: offset 194 length 4096
* schannel: received incomplete message, need more data
* schannel: SSL/TLS connection with admin.lab.htl-villach.at port 443 (step 2/3)
* schannel: encrypted data got 451
* schannel: encrypted data buffer: offset 645 length 4096
* schannel: sending next handshake data: sending 93 bytes...
* schannel: SSL/TLS connection with admin.lab.htl-villach.at port 443 (step 2/3)
* schannel: encrypted data got 195
* schannel: encrypted data buffer: offset 195 length 4096
* schannel: SSL/TLS handshake complete
* schannel: SSL/TLS connection with admin.lab.htl-villach.at port 443 (step 3/3)
* schannel: stored credential handle in session cache
> GET / HTTP/1.1
> Host: admin.lab.htl-villach.at
> User-Agent: curl/7.55.1
> Accept: */*
>
* schannel: client wants to read 102400 bytes
* schannel: encdata_buffer resized 103424
* schannel: encrypted data buffer: offset 0 length 103424
* schannel: encrypted data got 19811
* schannel: encrypted data buffer: offset 19811 length 103424
* schannel: decrypted data length: 382
* schannel: decrypted data added: 382
* schannel: decrypted data cached: offset 382 length 102400
* schannel: encrypted data length: 19400
* schannel: encrypted data cached: offset 19400 length 103424
* schannel: decrypted data length: 2358
* schannel: decrypted data added: 2358
* schannel: decrypted data cached: offset 2740 length 102400
* schannel: encrypted data length: 17013
* schannel: encrypted data cached: offset 17013 length 103424
* schannel: decrypted data length: 1738
* schannel: decrypted data added: 1738
* schannel: decrypted data cached: offset 4478 length 102400
* schannel: encrypted data length: 15246
* schannel: encrypted data cached: offset 15246 length 103424
* schannel: decrypted data length: 4716
* schannel: decrypted data added: 4716
* schannel: decrypted data cached: offset 9194 length 102400
* schannel: encrypted data length: 10501
* schannel: encrypted data cached: offset 10501 length 103424
* schannel: decrypted data length: 5895
* schannel: decrypted data added: 5895
* schannel: decrypted data cached: offset 15089 length 102400
* schannel: encrypted data length: 4577
* schannel: encrypted data cached: offset 4577 length 103424
* schannel: decrypted data length: 4483
* schannel: decrypted data added: 4483
* schannel: decrypted data cached: offset 19572 length 102400
* schannel: encrypted data length: 65
* schannel: encrypted data cached: offset 65 length 103424
* schannel: decrypted data length: 2
* schannel: decrypted data added: 2
* schannel: decrypted data cached: offset 19574 length 102400
* schannel: encrypted data length: 34
* schannel: encrypted data cached: offset 34 length 103424
* schannel: decrypted data length: 5
* schannel: decrypted data added: 5
* schannel: decrypted data cached: offset 19579 length 102400
* schannel: encrypted data buffer: offset 0 length 103424
* schannel: decrypted data buffer: offset 19579 length 102400
* schannel: schannel_recv cleanup
* schannel: decrypted data returned 19579
* schannel: decrypted data buffer: offset 0 length 102400
< HTTP/1.1 200 OK
< Accept-Ranges: bytes
< Alt-Svc: h3=":443"; ma=2592000
< Cache-Control: max-age=31536000
< Connection: upgrade
< Content-Type: text/html; charset=utf-8
< Date: Mon, 20 Mar 2023 20:54:09 GMT
< Last-Modified: Thu, 23 Feb 2023 02:11:06 GMT
< Server: Caddy
< Vary: Accept-Encoding
< X-Content-Type-Options: nosniff
< X-Xss-Protection: 1; mode=block
< Transfer-Encoding: chunked
<
<!doctype html><html lang="en" ng-app="portainer" ng-strict-di data-edition="CE"><head><meta charset="utf-8"/><title>Portainer</title><meta name="description" content=""/><meta name="author" content="Portainer.io"/><meta http-equiv="cache-control" content="no-cache"/><meta http-equiv="expires" content="0"/><meta http-equiv="pragma" content="no-cache"/><base id="base"/><script>if (window.origin == 'file://') {
// we are loading the app from a local file as in docker extension
document.getElementById('base').href = 'http://localhost:49000/';
window.ddExtension = true;
} else {
var path = window.location.pathname.replace(/^\/+|\/+$/g, '');
var basePath = path ? '/' + path + '/' : '/';
document.getElementById('base').href = basePath;
}</script><!--[if lt IE 9]>
<script src="//html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]--><link rel="apple-touch-icon" sizes="180x180" href="63a301f0574f1a696ce6.png"/><link rel="icon" type="image/png" sizes="32x32" href="2dcfc527d067d4ae3424.png"/><link rel="icon" type="image/png" sizes="16x16" href="112a479c093f4729251d.png"/><link rel="mask-icon" href="data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0MjAiIGhlaWdodD0iNDIwIiB2aWV3Qm94PSIwIDAgMzE1LjAwMDAwMCAzMTUuMDAwMDAwIj48cGF0aCBkPSJNMTYzIDEzLjN2Ni40bC0zOC4zIDIyLjEtMzguMiAyMi4xaC0zNGMtMi44LjEtMyAuMy0zLjIgNC41LS4yIDMuNC4xIDQuNSAxLjUgNC44LjkuMiAxNiAuMyAzMy41LjIgMTcuNCAwIDMxLjcuMiAzMS44LjUuMS4zLjIgMTAuMy40IDIyLjEuMSAxMS44LjMgMjEuOC40IDIyLjIgMCAuNSA1LjUuOCAxMiAuOGgxMS45bC0uMS0yMi44LS4xLTIyLjcgMTEuMi0uMUgxNjNWMjA0bDMuNS4xYzEuOS4xIDQuMS4yIDQuNy4zIDEgLjEgMS4zLTEzLjcgMS4zLTY1LjNWNzMuN2wzLjMtLjMgMy4yLS4yLjEgNjYuNnY2Ni43bDQuOCAzLjEgNC43IDMuMnYtNjljLS4xLTM4IC4xLTY5LjMuNC02OS43LjMtLjQgMTcuMi0uNyAzNy41LS43aDM3bC4zLTQuNi4zLTQuNi04LjMtLjMtOC4zLS40LTM3LTIxLjRjLTIwLjMtMTEuOC0zNy4yLTIxLjYtMzcuNS0yMS44LS4zLS4zLS41LTIuOC0uNi01LjYtLjEtMi45LS4yLTUuOC0uMy02LjUtLjEtLjctMS43LTEuMi00LjYtMS4ySDE2M3Y2LjN6bTAgMzQuMXYxNi41aC0yOC4yYy0yOCAwLTI4LjMgMC0yNS44LTEuOSAxLjQtMSA0LjMtMi44IDYuNS00IDIuMi0xLjEgMTMuNS03LjYgMjUtMTQuNCAxMS42LTYuOSAyMS4zLTEyLjUgMjEuOC0xMi41LjQtLjEuNyA3LjMuNyAxNi4zem0yOC42LTUuNGM3LjUgNC40IDEzLjcgOCAxMy45IDggLjEgMCA0LjUgMi41IDkuNiA1LjcgNS4yIDMuMSAxMC41IDYuMiAxMS45IDYuOSAyLjEgMS4xLTIgMS4zLTI2IDEuMWwtMjguNS0uMlY0Ny4zbC0uMS0xNi4xIDIuOCAxLjRjMS41LjggOC45IDUgMTYuNCA5LjR6bS01NS40IDQwLjVjMCA0LjktLjEgOS43LS4xIDEwLjUtLjEgMS4zLTEuNSAxLjYtNy4zIDEuNWwtNy4zLS4xLS41LTEwLjUtLjUtMTAuNiA3LjguMSA3LjkuMXY5em0tMTIuMyAyMy45Yy4xIDYuNi0uMiA4LjUtMS40IDktLjguMy0xLjUuMi0xLjYtLjItLjQtMy40LS41LTE1LS4xLTE2IC4yLS42IDEtMS4yIDEuNy0xLjIuOSAwIDEuMyAyLjMgMS40IDguNHptNi43LjRjMCA0LjUtLjMgOC4yLS44IDguMi0uNCAwLTEuMS4xLTEuNS4yLS41LjItLjgtMy43LS45LTguNSAwLTcuNS4yLTguNyAxLjUtOC41IDEuMy4zIDEuNiAxLjkgMS43IDguNnptNi45IDBjLjEgNy4yLS4xIDguMi0xLjYgOC4yLTEuNiAwLTEuOC0xLTEuNy04LjUuMS03LjMuMy04LjUgMS43LTguMyAxLjMuMyAxLjYgMS44IDEuNiA4LjZ6Ii8+PHBhdGggZD0iTTYxLjkgMTA4YzAgLjMtLjEgNS43LS4yIDEybC0uMSAxMS41IDEyLjIuMyAxMi4yLjN2LTI0LjZINzRjLTYuNiAwLTEyIC4yLTEyLjEuNXptNy4xIDExLjRjMCA4LTEgMTEuMS0yLjYgOC41LS41LS45LS44LTguNi0uNS0xNS4yLjEtLjkuOC0xLjcgMS42LTEuNyAxLjIgMCAxLjUgMS42IDEuNSA4LjR6bTctLjFjMCA4LjYtLjMgOS45LTIuMyA5LjEtLjgtLjMtMS4xLTMtMS03LjcuMi0xMCAuMS05LjcgMS44LTkuNyAxLjIgMCAxLjUgMS42IDEuNSA4LjN6bTYuOC0uM2MuMyA4LjQtLjIgMTAuNy0yLjEgOS4yLS45LS43LTEuMi0zLjYtMS4xLTguOS4yLTkuMi4xLTguNiAxLjctOC4xLjguMyAxLjMgMyAxLjUgNy44ek04OS40IDEwNy45Yy0uMi4yLS40IDUuOC0uNCAxMi4zVjEzMmgyNC41bC0uMS0xMS4zYy0uMS02LjEtLjItMTEuNy0uMy0xMi4yLS4xLTEtMjIuNy0xLjUtMjMuNy0uNnptNy4yIDExLjJjLjEgOC42LS4zIDEwLTIuMiA5LjItMS0uNC0xLjQtMi41LTEuNC04LjIgMC00LjMuMy04LjEuNy04LjUgMS44LTEuOCAyLjguNyAyLjkgNy41em02LjUtNy40Yy40IDMuOS4zIDE1LjctLjIgMTYuNS0xLjcgMi43LTIuOS0uOS0yLjktOC44IDAtNi44LjMtOC40IDEuNS04LjQuOCAwIDEuNS4zIDEuNi43em03IC41Yy41IDUuNS4zIDEzLjYtLjQgMTUuMS0xLjYgMy42LTIuNy40LTIuNy03LjkgMC02LjguMy04LjQgMS41LTguNC44IDAgMS41LjYgMS42IDEuMnpNOTQuMyAxMzQuOGwtNS4zLjN2MTJjMCA4LjguMyAxMS45IDEuMyAxMiAxLjcuMSAxNS41LjEgMTkuNyAwbDMuNS0uMS0uMS0xMC44Yy0uMS01LjktLjItMTEuNC0uMy0xMi4yLS4xLTEuNS02LjItMS45LTE4LjgtMS4yem0yLjIgMTIuM2MwIDYuOC0uMyA4LjQtMS41IDguNHMtMS42LTEuNi0xLjgtNy4zYy0uNC04LjEuMS0xMC42IDIuMS05LjkuOC4yIDEuMiAyLjkgMS4yIDguOHptNi42LTcuNGMuNSA1LjkuMyAxNC42LS4yIDE1LjUtLjQuNi0xLjIuNy0xLjguNC0xLjItLjgtMS42LTE1LjgtLjQtMTYuOSAxLjItMS4yIDIuMy0uNyAyLjQgMXptNy0xYzAgLjUuMSA0LjQuMiA4LjggMCA2LjMtLjIgOC0xLjQgOC0xLjEgMC0xLjUtMS45LTEuNy04LjgtLjItNy4zIDAtOC43IDEuMy04LjcuOCAwIDEuNS4zIDEuNi43ek0xMjAgMTM0LjhsLTMuNS4zLS4xIDExLjljMCA3LjYuNCAxMiAxLjEgMTIuMSA0LjYuMyAyMS41IDAgMjIuMy0uNS41LS4zIDEtNS43IDEtMTIuMWwuMS0xMS41LTUuNy0uMWMtMy4xIDAtNy0uMS04LjctLjItMS42LS4xLTQuNi0uMS02LjUuMXptMy40IDQuOGMxIDIuNy43IDE1LjItLjUgMTUuOS0uNi40LTEuMy40LTEuNi4xLS43LS43LTEuMi0xNS43LS42LTE2LjkuNy0xLjIgMi4xLS44IDIuNy45em03LjMgNmMuMiA3LjktLjQgMTAuNy0yIDEwLjEtLjgtLjItMS4yLTMuMi0xLjMtOC4zLS4xLTguNS4xLTkuNyAxLjktOS4xLjcuMiAxLjMgMy4xIDEuNCA3LjN6bTYuOSAwYy4yIDguNS0uMyAxMC41LTIuMiA5LjctMS4xLS40LTEuNC0yLjItMS4zLTguMi4yLTguMy41LTkuNCAyLjItOC44LjguMiAxLjIgMyAxLjMgNy4zek02MS45IDEzNi43Yy0uNCA5LS4zIDIxLjYuMyAyMS45LjcuNCAxMy45LjcgMjEuMS41bDIuNy0uMXYtMjRINzRjLTEwLjcgMC0xMiAuMi0xMi4xIDEuN3pNNjkgMTQ3YzAgNS0uNCA5LS45IDktMS42IDAtMi4yLTEuNy0yLjItNy4yLS4yLTkuNiAwLTEwLjggMS42LTEwLjggMS4yIDAgMS41IDEuNyAxLjUgOXptNi44LS41Yy4zIDcuMi0uNyAxMC45LTIuNCA5LjItLjQtLjQtLjctMy41LS43LTYuOS4xLTEwLjIuMi0xMSAxLjYtMTAuNi44LjMgMS4zIDMuMSAxLjUgOC4zem03IDBjLjIgNC43LS4xIDguMi0uOCA4LjktMS44IDEuOC0yLjYtLjgtMi40LTguNi4yLTkuMy4yLTkgMS43LTguNi44LjMgMS4zIDMuMSAxLjUgOC4zek01OS40IDE2Ni43Yy0zLjEgNy4yLTQuMyAxMy42LTQgMjEuMi41IDEyLjUgNC45IDIyLjQgMTMuNyAzMS4xIDQuMSA0LjEgNS40IDQuOCA3LjIgNC4xIDEuMi0uNCAzLjktLjcgNS45LS42IDMuNi4xIDMuOC0uMSA2LjgtNi4yIDguMi0xNi43IDI5LjEtMjMuMyA0Ny42LTE1LjIgMi40IDEuMSA0LjYgMi40IDQuOSAyLjkgMi41IDQuMSA1LjQtMy4zIDUuOS0xNS4zLjQtOC0uNi0xNC0zLjUtMjAuN2wtMi4xLTVINjFsLTEuNiAzLjd6Ii8+PHBhdGggZD0iTTExOC41IDIwMi44Yy02IC45LTExIDIuOC0xNS4xIDUuNy01LjIgMy43LTExIDExLjMtMTEuOSAxNS42LS42IDIuNC0xLjIgMi45LTMuOCAzLTkuNi4yLTE3LjMgMy41LTIzLjcgMTAtNiA2LjItOC40IDEyLjEtOC42IDIwLjktLjMgMTAuMiAyLjEgMTYuNSA5LjEgMjMuNSA2LjYgNi42IDEyLjUgOSAyMiA5IDYuNyAwIDcuMS4xIDguOSAzIDIuNiA0LjIgNy4zIDguMyAxMy4xIDExLjMgNC4yIDIuMiA2LjMgMi42IDEzIDIuNiA5LjUgMCAxNi45LTIuOSAyMi44LTguOWwzLjctMy44IDYuMSAzLjNjMTMgNi45IDI5LjQgMy43IDM4LjgtNy42IDUuMy02LjUgNy4yLTExLjcgNy4zLTIwLjQuMi03LS4yLTguNi0yLjgtMTMuNy0yLjYtNS0yLjktNi40LTIuMS05LjMgMi4zLTguOS0xLjctMjIuMi04LjktMjkuNC05LjgtOS44LTIyLjgtMTEuNy0zOC4xLTUuNS0zIDEuMi0zLjQgMS4xLTUuOC0xLjQtNS4xLTUtMTcuMS05LTI0LTcuOXoiLz48L3N2Zz4=" color="#5bbad5"/><link rel="shortcut icon" href="data:image/vnd.microsoft.icon;base64,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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"/><meta name="msapplication-config" content="6d50eaeb9f128c130ed9.xml"/><meta name="theme-color" content="#ffffff"/><script defer="defer" src="runtime.3e3d5da69a6f597f1396.js"></script><script defer="defer" src="vendor.ae28ff4d1f105fcc56e1.js"></script><script defer="defer" src="main.15f004558ddbf71f405e.js"></script><link href="vendor.ada35035b3b2d76da384.css" rel="stylesheet"><link href="main.a008fa267e62ff64a95b.css" rel="stylesheet"></head><body ng-controller="MainController"><react-query-dev-tools></react-query-dev-tools><div id="page-wrapper" ng-class="{
open: isSidebarOpen() && ['portainer.auth', 'portainer.init.admin', 'portainer.init.endpoint'].indexOf($state.current.name) === -1,
nopadding: ['portainer.auth', 'portainer.init.admin', 'portainer.init.endpoint', 'portainer.logout'].indexOf($state.current.name) > -1 || applicationState.loading
}" ng-cloak><div id="sideview" ui-view="sidebar" ng-if="!applicationState.loading"></div><div id="content-wrapper"><div class="page-content"><div class="page-wrapper" ng-if="applicationState.loading"><div class="container simple-box"><div class="col-md-6 col-md-offset-3 col-sm-6 col-sm-offset-3"><div class="row"><img ng-if="logo" ng-src="{{ logo }}" class="simple-box-logo"/> <img ng-if="!logo" src="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyNS4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiDQoJIHZpZXdCb3g9IjAgMCA5NDAgMzAwIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA5NDAgMzAwOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7ZmlsbDojMTNCRUY5O30NCgkuc3Qxe2ZpbGw6IzEzQkVGOTt9DQo8L3N0eWxlPg0KPGc+DQoJPHBvbHlnb24gY2xhc3M9InN0MCIgcG9pbnRzPSI4NC4zLDc2LjYgODAuMyw3Ni42IDgwLjMsOTcuMyA4NC4zLDk3LjMgODQuMyw3Ni42IAkiLz4NCgk8cG9seWdvbiBjbGFzcz0ic3QwIiBwb2ludHM9IjEwMS41LDc2LjYgOTcuNSw3Ni42IDk3LjUsOTcuMyAxMDEuNSw5Ny4zIDEwMS41LDc2LjYgCSIvPg0KCTxwb2x5Z29uIGNsYXNzPSJzdDAiIHBvaW50cz0iMTI1LDM3LjEgMTIwLjksMzAgNTIuNSw2OS41IDU2LjYsNzYuNiAxMjUsMzcuMSAJIi8+DQoJPHBvbHlnb24gY2xhc3M9InN0MCIgcG9pbnRzPSIxMjQuNiwzNy4xIDEyOC43LDMwIDE5Ny4xLDY5LjUgMTkzLDc2LjYgMTI0LjYsMzcuMSAJIi8+DQoJPHBvbHlnb24gY2xhc3M9InN0MCIgcG9pbnRzPSIyMDkuMiw3Ni43IDIwOS4yLDY4LjUgMjEuOCw2OC41IDIxLjgsNzYuNyAyMDkuMiw3Ni43IAkiLz4NCgk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTM1LDE5Mi41VjcxaDguMnYxMjcuNEMxNDEsMTk1LjksMTM4LjIsMTk0LjEsMTM1LDE5Mi41TDEzNSwxOTIuNXoiLz4NCgk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTIxLDE5MC40VjE5aDguMnYxNzIuNEMxMjYuOSwxOTAuMywxMjEuMywxOTAuNCwxMjEsMTkwLjRMMTIxLDE5MC40eiIvPg0KCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik00My4zLDIwNy41Yy0xMC03LjQtMTYuNi0xOS4yLTE2LjYtMzIuNmMwLTcuMSwxLjktMTQuMSw1LjQtMjAuMmg3MGMzLjYsNi4xLDUuNCwxMy4xLDUuNCwyMC4yDQoJCWMwLDYuMi0wLjgsMTItMy4zLDE3LjJjLTUuMy01LjEtMTMuMS03LjMtMjEtNy4zYy0xNCwwLTI2LDguNy0yOS4xLDIxLjdjLTEuMS0wLjEtMS44LTAuMi0yLjktMC4yDQoJCUM0OC41LDIwNi40LDQ1LjksMjA2LjgsNDMuMywyMDcuNUw0My4zLDIwNy41eiIvPg0KCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik0yMTkuOCwxMTUuNWMtMTAuNiwwLTE5LjksNC45LTI2LjMsMTIuNXYtMTEuNGgtMTAuNnYxMDEuM2gxMC42di00Mi43YzYuMyw3LjgsMTUuNywxMi44LDI2LjMsMTIuOA0KCQljMTkuOCwwLDM2LjEtMTYuOSwzNi4xLTM2LjRDMjU1LjksMTMxLjgsMjM5LjYsMTE1LjUsMjE5LjgsMTE1LjVMMjE5LjgsMTE1LjV6IE0yMjAuMSwxNzcuNWMtMTMuOCwwLTI2LTEyLjItMjYtMjYNCgkJYzAtMTQuMSwxMi4yLTI1LjYsMjYtMjUuNmMxNC4xLDAsMjQuNywxMS41LDI0LjcsMjUuNkMyNDQuOCwxNjUuMywyMzQuMiwxNzcuNSwyMjAuMSwxNzcuNUwyMjAuMSwxNzcuNXoiLz4NCgk8cGF0aCBjbGFzcz0ic3QxIiBkPSJNMzAyLjMsMTg3LjljMTkuOCwwLDM2LjEtMTYuOSwzNi4xLTM2LjRjMC0xOS44LTE2LjMtMzYuMS0zNi4xLTM2LjFjLTE5LjgsMC0zNi4xLDE2LjMtMzYuMSwzNi4xDQoJCUMyNjYuMiwxNzEsMjgyLjUsMTg3LjksMzAyLjMsMTg3LjlMMzAyLjMsMTg3Ljl6IE0zMDIuMywxMjUuOWMxNC4xLDAsMjUsMTEuNSwyNSwyNS42YzAsMTMuOC0xMC45LDI2LTI1LDI2Yy0xNC4xLDAtMjUtMTIuMi0yNS0yNg0KCQlDMjc3LjMsMTM3LjUsMjg4LjIsMTI1LjksMzAyLjMsMTI1LjlMMzAyLjMsMTI1Ljl6Ii8+DQoJPHBhdGggY2xhc3M9InN0MSIgZD0iTTM2NS42LDExNi42SDM1NXY2OS42aDEwLjZ2LTM4LjVjMC0xNC4yLDExLjItMjEuOCwyMy42LTIxLjh2LTEwLjRjLTkuNiwwLTE3LjksNC4xLTIzLjYsMTAuNlYxMTYuNg0KCQlMMzY1LjYsMTE2LjZ6Ii8+DQoJPHBvbHlnb24gY2xhc3M9InN0MSIgcG9pbnRzPSI0MzMuOCwxMjYuMiA0MzMuOCwxMTYuNiA0MTguMSwxMTYuNiA0MTguMSw4OS4yIDQwNy41LDg5LjIgNDA3LjUsMTE2LjYgMzk3LjEsMTE2LjYgMzk3LjEsMTI2LjIgDQoJCTQwNy41LDEyNi4yIDQwNy41LDE4Ni4yIDQxOC4xLDE4Ni4yIDQxOC4xLDEyNi4yIDQzMy44LDEyNi4yIAkiLz4NCgk8cGF0aCBjbGFzcz0ic3QxIiBkPSJNNDc4LjYsMTg3LjljMTAuNiwwLDE5LjktNS4xLDI2LjMtMTIuOHYxMS40aDEwLjZ2LTY5LjloLTEwLjZWMTI4Yy02LjMtNy42LTE1LjctMTIuNS0yNi4zLTEyLjUNCgkJYy0xOS44LDAtMzYuMSwxNi4zLTM2LjEsMzYuMUM0NDIuNSwxNzEsNDU4LjgsMTg3LjksNDc4LjYsMTg3LjlMNDc4LjYsMTg3Ljl6IE00NzguMiwxNzcuNWMtMTQuMSwwLTI0LjctMTIuMi0yNC43LTI2DQoJCWMwLTE0LjEsMTAuNi0yNS42LDI0LjctMjUuNmMxMy44LDAsMjYsMTEuNSwyNiwyNS42QzUwNC4yLDE2NS4zLDQ5MiwxNzcuNSw0NzguMiwxNzcuNUw0NzguMiwxNzcuNXoiLz4NCgk8cGF0aCBjbGFzcz0ic3QxIiBkPSJNNTQzLjYsMTAyLjVjNCwwLDcuNC0zLjMsNy40LTcuNmMwLTMuOC0zLjUtNy4zLTcuNC03LjNjLTQuMywwLTcuNiwzLjUtNy42LDcuMw0KCQlDNTM2LDk5LjIsNTM5LjMsMTAyLjUsNTQzLjYsMTAyLjVMNTQzLjYsMTAyLjV6IE01MzguMiwxODYuMmgxMS4xdi02OS42aC0xMS4xVjE4Ni4yTDUzOC4yLDE4Ni4yeiIvPg0KCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik01NzEuNiwxODYuMmgxMC42di0zN2MwLTE1LjcsOC43LTIzLjYsMjIuOC0yMy4zYzExLjYsMCwxNy45LDYuOCwxNy45LDIwLjZ2MzkuN2gxMC42di0zOS43DQoJCWMwLTIyLjItOC41LTMxLTI4LjUtMzFjLTkuNSwwLTE3LjIsMy41LTIyLjgsOS41di04LjRoLTEwLjZWMTg2LjJMNTcxLjYsMTg2LjJ6Ii8+DQoJPHBhdGggY2xhc3M9InN0MSIgZD0iTTcyMC43LDE1MS41YzAtMTkuOC0xNi4zLTM2LjEtMzYuMS0zNi4xYy0xOS44LDAtMzYuMSwxNi4zLTM2LjEsMzYuMWMwLDE5LjUsMTYuMywzNi40LDM2LjEsMzYuNA0KCQljMTQuMSwwLDI2LjYtOC4xLDMyLjQtMjAuMWgtMTMuMWMtNC40LDUuNy0xMS4yLDkuNy0xOS4zLDkuN2MtMTIuMywwLTIyLjMtOS41LTI0LjUtMjFoNjAuNkw3MjAuNywxNTEuNUw3MjAuNywxNTEuNXoNCgkJIE02ODQuNiwxMjUuOWMxMi4yLDAsMjIuMiw4LjksMjQuNSwyMC40aC00OS4xQzY2Mi40LDEzNC44LDY3Mi4zLDEyNS45LDY4NC42LDEyNS45TDY4NC42LDEyNS45eiIvPg0KCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik03NDcuOSwxMTYuNmgtMTAuNnY2OS42aDEwLjZ2LTM4LjVjMC0xNC4yLDExLjItMjEuOCwyMy42LTIxLjh2LTEwLjRjLTkuNywwLTE3LjksNC4xLTIzLjYsMTAuNlYxMTYuNg0KCQlMNzQ3LjksMTE2LjZ6Ii8+DQoJPHBhdGggY2xhc3M9InN0MSIgZD0iTTc4Ny41LDE4N2M0LjcsMCw4LjctNCw4LjctOC45YzAtNC43LTQtOC43LTguNy04LjdjLTQuOSwwLTguOSw0LTguOSw4LjdDNzc4LjYsMTgzLDc4Mi42LDE4Nyw3ODcuNSwxODcNCgkJTDc4Ny41LDE4N3oiLz4NCgk8cGF0aCBjbGFzcz0ic3QxIiBkPSJNODIzLjUsMTAyLjVjNCwwLDcuNC0zLjMsNy40LTcuNmMwLTMuOC0zLjUtNy4zLTcuNC03LjNjLTQuMywwLTcuNiwzLjUtNy42LDcuMw0KCQlDODE2LDk5LjIsODE5LjMsMTAyLjUsODIzLjUsMTAyLjVMODIzLjUsMTAyLjV6IE04MTguMiwxODYuMmgxMS4xdi02OS42aC0xMS4xVjE4Ni4yTDgxOC4yLDE4Ni4yeiIvPg0KCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik04ODIuMSwxODcuOWMxOS44LDAsMzYuMS0xNi45LDM2LjEtMzYuNGMwLTE5LjgtMTYuMy0zNi4xLTM2LjEtMzYuMWMtMTkuOCwwLTM2LjEsMTYuMy0zNi4xLDM2LjENCgkJQzg0NiwxNzEsODYyLjMsMTg3LjksODgyLjEsMTg3LjlMODgyLjEsMTg3Ljl6IE04ODIuMSwxMjUuOWMxNC4xLDAsMjUsMTEuNSwyNSwyNS42YzAsMTMuOC0xMC45LDI2LTI1LDI2Yy0xNC4xLDAtMjUtMTIuMi0yNS0yNg0KCQlDODU3LjEsMTM3LjUsODY4LDEyNS45LDg4Mi4xLDEyNS45TDg4Mi4xLDEyNS45eiIvPg0KCTxwb2x5Z29uIGNsYXNzPSJzdDAiIHBvaW50cz0iNzcuNywxMDYuNSA1Ni41LDEwNi41IDU2LjUsMTI3LjggNzcuNywxMjcuOCA3Ny43LDEwNi41IAkiLz4NCgk8cG9seWdvbiBjbGFzcz0ic3QwIiBwb2ludHM9IjUzLjgsMTA2LjUgMzIuNiwxMDYuNSAzMi42LDEyNy44IDUzLjgsMTI3LjggNTMuOCwxMDYuNSAJIi8+DQoJPHBvbHlnb24gY2xhc3M9InN0MCIgcG9pbnRzPSI1My44LDEzMC4yIDMyLjYsMTMwLjIgMzIuNiwxNTEuNSA1My44LDE1MS41IDUzLjgsMTMwLjIgCSIvPg0KCTxwb2x5Z29uIGNsYXNzPSJzdDAiIHBvaW50cz0iNzcuNywxMzAuMiA1Ni41LDEzMC4yIDU2LjUsMTUxLjUgNzcuNywxNTEuNSA3Ny43LDEzMC4yIAkiLz4NCgk8cG9seWdvbiBjbGFzcz0ic3QwIiBwb2ludHM9IjEwMS41LDEzMC4yIDgwLjMsMTMwLjIgODAuMywxNTEuNSAxMDEuNSwxNTEuNSAxMDEuNSwxMzAuMiAJIi8+DQoJPHBvbHlnb24gY2xhc3M9InN0MCIgcG9pbnRzPSIxMDEuNSw5NS4xIDgwLjMsOTUuMSA4MC4zLDExNi40IDEwMS41LDExNi40IDEwMS41LDk1LjEgCSIvPg0KCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik01Ny42LDIxMC43YzIuOS0xMi4zLDE0LTIxLjUsMjcuMi0yMS41YzguNSwwLDE2LjEsMy44LDIxLjMsOS44YzQuNS0zLjEsOS45LTQuOSwxNS44LTQuOQ0KCQljMTUuNCwwLDI3LjksMTIuNSwyNy45LDI3LjljMCwzLjItMC41LDYuMi0xLjUsOS4xYzMuNCw0LjYsNS41LDEwLjQsNS41LDE2LjZjMCwxNS40LTEyLjUsMjcuOS0yNy45LDI3LjljLTYuOCwwLTEzLTIuNC0xNy44LTYuNA0KCQljLTUuMSw3LjEtMTMuNCwxMS44LTIyLjgsMTEuOGMtMTAuOCwwLTIwLjItNi4yLTI0LjktMTUuMmMtMS45LDAuNC0zLjgsMC42LTUuOCwwLjZjLTE1LjQsMC0yOC0xMi41LTI4LTI3LjlzMTIuNS0yNy45LDI4LTI3LjkNCgkJQzU1LjYsMjEwLjUsNTYuNiwyMTAuNSw1Ny42LDIxMC43TDU3LjYsMjEwLjd6Ii8+DQo8L2c+DQo8L3N2Zz4NCg==" class="simple-box-logo" alt="Portainer"/></div><div class="ml-0 mr-0 flex items-center justify-center text-center">Loading Portainer... <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="inline animate-spin-slow !ml-1"><circle cx="12" cy="12" r="3"></circle><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"></path></svg></div></div></div></div><div id="view" ui-view="content" ng-if="!applicationState.loading"></div></div></div></div></body></html>* Connection #0 to host admin.lab.htl-villach.at left intact
3. Caddy version:
v2.6.4 h1:2hwYqiRwk1tf3VruhMpLcYTg+11fCdr8S3jhNAdnPy8=
4. How I installed and ran Caddy:
Caddy runs via docker-compose
a. System environment:
Host OS : “Ubuntu 22.04.2 LTS”
Docker version 23.0.1, build a5ee5b1
b. Command:
docker compose up -d
c. Service/unit/compose file:
Caddy
Dockerfile
FROM caddy:2.6.4-builder AS builder
RUN xcaddy build \
--with github.com/caddy-dns/cloudflare
FROM caddy:2.6.4
COPY --from=builder /usr/bin/caddy /usr/bin/caddy
docker-compose.yml
version: "3.7"
services:
caddy:
image: caddy-cloudflare:2.6.4
container_name: lab_caddy
build: .
restart: unless-stopped
environment:
- CLOUDFLARE_API_TOKEN=${CLOUDFLARE_API_TOKEN}
networks:
- lab_nginx_net
- lab_portainer_net
ports:
- target: 80
published: 80
protocol: tcp
# HTTPS
- target: 443
published: 443
protocol: tcp
# HTTP/3
- target: 443
published: 443
protocol: udp
volumes:
- /root/docker-server/caddy/etc/caddy/Caddyfile:/etc/caddy/Caddyfile
- /root/docker-server/caddy/data:/data # Optional
- /root/docker-server/caddy/config:/config # Optional
- /var/run/docker.sock:/var/run/docker.sock
networks:
lab_nginx_net:
name: lab_nginx_net
lab_portainer_net:
name: lab_portainer_net
Portainer:
version: "3"
services:
portainer:
image: portainer/portainer-ce:latest
container_name: lab_portainer
restart: unless-stopped
networks:
- lab_portainer_net
ports:
- 9443:9443
- 9000:9000
- 8000:8000
volumes:
- portainer_data:/data
- /var/run/docker.sock:/var/run/docker.sock
volumes:
portainer_data:
networks:
lab_portainer_net:
name: lab_portainer_net
d. My complete Caddy config:
{
email Robert.Hufsky@htl-villach.at
acme_dns cloudflare {env.CLOUDFLARE_API_TOKEN}
## acme_ca https://acme-staging-v02.api.letsencrypt.org/directory
## admin off
}
########################################################
#
# handle these servers with a wildcard certificate
#
########################################################
*.lab.htl-villach.at {
tls {
dns cloudflare {env.CLOUDFLARE_API_TOKEN}
}
################################################
#
# nginx demo server
#
################################################
@nginx host nginx.lab.htl-villach.at
handle @nginx {
reverse_proxy / lab_nginx:80
}
################################################
#
# admin portainer
#
################################################
@admin host admin.lab.htl-villach.at
handle @admin {
reverse_proxy / https://lab_portainer:9000
}
# Fallback for otherwise unhandled domains
handle {
abort
}
}