Dockerでtraefikを使用する際にいくつかの問題に遭遇しましたが、その理由はわかりません。
一部のコンテナでは、チャームのように機能しますが、他のコンテナでは、これらのコンテナにアクセスしようとするとエラーが発生します:不正なゲートウェイ(エラー502)。
これが私のtraefik.tomlです:
# Service logs (here debug mode)
debug = true
logLevel = "DEBUG"
defaultEntryPoints = ["http", "https"]
# Access log
filePath = "/var/log/traefik/access.log"
format = "common"
################################################################
# Web configuration backend
################################################################
[web]
address = ":8080"
################################################################
# Entry-points configuration
################################################################
[entryPoints]
[entryPoints.http]
address = ":80"
[entryPoints.http.redirect]
entryPoint = "https"
[entryPoints.https]
address = ":443"
[entryPoints.https.tls]
################################################################
# Docker configuration backend
################################################################
[docker]
domain = "domain.tld"
watch = true
exposedbydefault = false
endpoint = "unix:///var/run/docker.sock"
################################################################
# Let's encrypt
################################################################
[acme]
email = "[email protected]"
storageFile = "acme.json"
onDemand = false
onHostRule = true
entryPoint = "https"
[acme.httpChallenge]
entryPoint = "http"
[[acme.domains]]
main = "domain.tld"
sans = ["docker.domain.tld", "traefik.domain.tld", "phpmyadmin.domain.tld", "perso.domain.tld", "muximux.domain.tld", "wekan.domain.tld", "wiki.domain.tld", "cloud.domain.tld", "email.domain.tld"]
ここに私のdocker-compose.yml(portainerの場合、これは機能するコンテナーです):
version: '2'
services:
portainer:
restart: always
image: portainer/portainer:latest
container_name: "portainer"
#Automatically choose 'Manage the Docker instance where Portainer is running' by adding <--Host=unix:///var/run/docker.sock> to the command
ports:
- "9000:9000"
networks:
- traefik-network
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ../portainer:/data
labels:
- traefik.enable=true
- traefik.backend=portainer
- traefik.frontend.rule=Host:docker.domain.tld
- traefik.docker.network=traefik-network
- traefik.port=9000
- traefik.default.protocol=http
networks:
traefik-network:
external : true
Docker.domain.tldにアクセスすると動作します!そして、httpsで、valideで証明書を暗号化しましょう:)
これが私のdocker-compose.ymlです(動作しないコンテナであるdokuwikiの場合):
version: '2'
services:
dokuwiki:
container_name: "dokuwiki"
image: bitnami/dokuwiki:latest
restart: always
volumes:
- ../dokuwiki/data:/bitnami
ports:
- "8085:80"
- "7443:443"
networks:
- traefik-network
labels:
- traefik.backend=dokuwiki
- traefik.docker.network=traefik-network
- traefik.frontend.rule=Host:wiki.domain.tld
- traefik.enable=true
- traefik.port=8085
- traefik.default.protocol=http
networks:
traefik-network:
external: true
Wiki.domain.tldにアクセスすると、機能しません!ブラウザに不正なゲートウェイエラーがあります。 traefik.portを7443に、traefik.default.protocolをhttpsに変更しようとしましたが、同じエラーが発生します。もちろん、IPとポート(http/https)を使用してwikiにアクセスしようとすると機能します。 wiki.domain.tldと入力したときのみ、ゲートウェイが正しくありません。
したがって、同じ宣言を持つ他のコンテナではなく、いくつかのコンテナで機能する理由がわかりません。
Traefikポートは、ホストの公開ポートではなく、コンテナのhttpポートである必要があります。 Dockerネットワークを介して通信するため、ポートの公開は不要であり、すべてのコンテナにアクセスするためにリバースプロキシで公開される単一のポートのみを持つという目標に反します。
要するに、次のものが必要です。
traefik.port=80
この質問には多くの意見が寄せられているため、多くの人々がtraefikから502を見る他の理由は、traefikインスタンスとは異なるドッカーネットワークにコンテナを配置するか、複数のネットワークにコンテナを持ち、どのネットワークを使用するかをtraefikに伝えないことです。作成ファイルには、traefikサービスのネットワークと一致する次の行があるため、これは当てはまりません。
services:
dokuwiki:
networks:
- traefik-network
labels:
- traefik.docker.network=traefik-network
networks:
traefik-network:
external : true
サービスを単一のネットワークにのみ割り当てた場合でも、ポートの公開などのアクションにより、サービスが2つの異なるネットワークに接続されます(2番目の入口ネットワーク)。ラベル内のネットワーク名は外部名である必要がありますが、これは同じ場合ですが、ネットワークを外部として指定しない他の場合は、docker network ls
出力。
traefik.docker.network
は完全修飾ネットワーク名でもある必要があります。外部で定義されているか、スタック名のプレフィックスが付いています。
または、docker.network=traefik-network
を使用してデフォルトのネットワークを定義できます。これは、すべてのコンテナにラベルを追加する必要がないことを意味します。