Traefik无法通过docker-compose连接到服务器。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Traefik无法通过docker-compose连接到服务器。相关的知识,希望对你有一定的参考价值。

我想安装 giteatraefik 在阿里巴巴云的实例中,但我无法得到任何页面或响应,从 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:latesttraefik: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

docker-compose.yml:

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

traefik.toml:

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

Traefik 失败 https 重定向

使用 docker-compose 和 traefik 实现微服务之间的通信

通过 nginx 或 traefik 通过 html 网页访问 docker 容器 websocket?

Docker Compose File无法获取.env变量