Traefik无法通过docker-compose连接到服务器。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Traefik无法通过docker-compose连接到服务器。相关的知识,希望对你有一定的参考价值。
我想安装 gitea
和 traefik
在阿里巴巴云的实例中,但我无法得到任何页面或响应,从 traefik
. 如何调试?docker logs traefik
没有错误
这是我的 docker-compose.yml
version: "3"
networks:
gitea_net:
external: true
internal:
external: false
services:
db:
image: postgres:9.6
restart: always
environment:
- POSTGRES_USER=gitea
- POSTGRES_PASSWORD=gitea
- POSTGRES_DB=gitea
labels:
- "traefik.enable=false"
networks:
- internal
volumes:
- ./postgres:/var/lib/postgresql/data
traefik:
image: traefik:latest
command: --docker
ports:
- 80:80
- 443:443
labels:
- "traefik.enable=true"
- "traefik.backend=dashboard"
- "traefik.frontend.rule=Host:traefik.mydomain.com"
- "traefik.port=8080"
networks:
- gitea_net
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./traefik.toml:/traefik.toml
- ./acme.json:/acme.json
container_name: traefik
restart: always
server:
image: gitea/gitea:latest
environment:
- USER_UID=1000
- USER_GID=1000
restart: always
networks:
- internal
volumes:
- ./gitea:/data
ports:
- "3000"
- "22"
labels:
- "traefik.enabled=true"
- "traefik.backend=gitea"
- "traefik.frontend.rule=Host:gitea.mydomain.com"
- "traefik.docker.network=gitea_net"
- "traefik.port=3000"
networks:
- internal
- gitea_net
depends_on:
- db
- traefik
这是我的 traefik.toml
#Traefik Global Configuration
debug = true
checkNewVersion = true
logLevel = "ERROR"
#Define the EntryPoint for HTTP and HTTPS
defaultEntryPoints = ["https","http"]
#Define the HTTP port 80 and
#HTTPS port 443 EntryPoint
#Enable automatically redirect HTTP to HTTPS
[entryPoints]
[entryPoints.http]
address = ":80"
[entryPoints.http.redirect]
entryPoint = "https"
[entryPoints.https]
address = ":443"
[entryPoints.https.tls]
#Enable Traefik Dashboard on port 8080
#with basic authentication method
[entryPoints.dash]
address=":8080"
[entryPoints.dash.auth]
[entryPoints.dash.auth.basic]
users = [
"admin:$apr1$nw$PAVvqQK30eAdrY0l9KCnK1",
]
[api]
entrypoint="dash"
dashboard = true
#Enable retry sending a request if the network error
[retry]
#Define Docker Backend Configuration
[docker]
endpoint = "unix:///var/run/docker.sock"
domain = "mydomain.com"
watch = true
exposedbydefault = false
#Letsencrypt Registration
#Define the Letsencrypt ACME HTTP challenge
[acme]
email = "mark@gmail.com"
storage = "acme.json"
entryPoint = "https"
OnHostRule = true
[acme.httpChallenge]
entryPoint = "http"
我可能错了,但你的设置可能只对Traefik有效,然后才是... 2.0
.
你可以通过更改docker镜像标签来快速检查它,从 traefik:latest
到 traefik:1.7
.
如果你仍然不能使它工作,那么请尝试我的设置,我知道是工作,因为正在使用。如果我的设置对你有用,那么你可以把它和你的设置进行比较,看看你如何让你的设置工作。我和你的主要区别在于我使用的是Treafik 1.7,而且我把Traefik作为一个独立的docker堆栈部署在服务器上,因为我相信这是正确的做法,至少如果你想在同一台服务器上使用它来调整尽可能多的服务的话。
另一个需要注意的是 acme.json
存储Letsencrypt证书的文件必须有以下功能 600
权限. 但如果我记得不错的话,这个权限问题不会导致traefik一直重启,但不确定,我也没有在我的 "我的 "中详细说明。bash脚本 来设置Traefik。
# Traefik will not create the certificates if we don't fix the permissions
# for the file where it stores the LetsEncrypt certificates.
chmod 600 acme.json
version: '2.3'
services:
traefik:
image: traefik:1.7
restart: always
ports:
- 80:80
- 443:443
networks:
- traefik
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./traefik.toml:/traefik.toml
- ./acme.json:/acme.json
container_name: traefik
labels:
- "traefik.acme.email=${TRAEFIK_ACME_EMAIL:? Missing TRAEFIK_ACME_EMAIL env var.}"
- "traefik.docker.domain=${TRAEFIK_DOCKER_DOMAIN:? Missing TRAEFIK_DOCKER_DOMAIN env var.}"
networks:
traefik:
external: true
网络是外部的,因此你需要运行 docker network create traefik
.
中的变量。docker-compose.yml
档案来自 .env
档案:
TRAEFIK_DOCKER_DOMAIN=dev.example.com
TRAEFIK_ACME_EMAIL=YOUR@EMAIL.COM
debug = false
logLevel = "ERROR"
defaultEntryPoints = ["https","http"]
[web]
address = ":8080"
[entryPoints]
[entryPoints.http]
address = ":80"
[entryPoints.http.redirect]
entryPoint = "https"
[entryPoints.https]
address = ":443"
[entryPoints.https.tls]
[retry]
[docker]
endpoint = "unix:///var/run/docker.sock"
watch = true
exposedByDefault = false
[acme]
storage = "acme.json"
entryPoint = "https"
onHostRule = true
[acme.httpChallenge]
entryPoint = "http"
从另一个服务附加docker compose服务的例子 docker-compose.yml
文件可以找到 此处:
service-name:
....
networks:
- shipfast
- traefik
labels:
- "traefik.enable=true"
- "traefik.backend=${ENVIRONMENT:-dev}.shipfast-api"
- "traefik.docker.network=traefik"
- "traefik.port=${SHIPFAST_HTTP_PORT}"
- "traefik.frontend.rule=Host:${SHIPFAST_PUBLIC_DOMAIN:-localhost}"
.....
networks:
shipfast:
driver: "bridge"
traefik:
external: true
以上是关于Traefik无法通过docker-compose连接到服务器。的主要内容,如果未能解决你的问题,请参考以下文章
traefik 结合 docker-compose 的快速安装及使用
将Traefik StripPrefix中间件添加到docker-compose标签结果为504
使用 docker-compose 和 traefik 实现微服务之间的通信