如何使用Traefik将主机名(子域)映射到Docker容器?

时间:2019-04-17 15:29:18

标签: docker nginx traefik

我有多个运行nginx的Docker容器,用于服务Web应用程序。这些容器在虚拟机abc.com上运行。它们都需要https。

如果仅运行一个容器,则可以访问在abc.com:443运行的容器。我还可以使用docker run和port映射运行多个容器,在其中可以将端口映射到433,如下所示:

VersionA          0.0.0.0:5000->443             can hit on abc.com:5000
VersionB          0.0.0.0:5001->443             can hit on abc.com:5001
VersionC          0.0.0.0:5002->443             can hit on abc.com:5002

我想要的是:

vA.abc.com -> VersionAContainer:443
vB.abc.com -> VersionBContainer:443
vC.abc.com -> VersionCContainer:443

这些容器会定期旋转并关闭,需要Traefik捡起。 traefik的正确构建命令和使用标签的容器的run命令是什么?

这就是我运气不佳的Traefik容器的方式。

sudo docker container run -d --name traefik_proxy \
    --network traefik_webgateway \
    -p 80:80 \
    -p 443:443 \
    -p 8080:8080 \
    --restart always \
    --volume /var/run/docker.sock:/var/run/docker.sock \
    --volume /dev/null:/traefik.toml \
    traefik --docker --logLevel=INFO --api \
        --entrypoints="Name:http Address::80 Redirect.EntryPoint:https" \
        --entrypoints="Name:https Address::443 TLS" \
        --defaultentrypoints="http,https"

这就是我运行容器的方式:

sudo docker run -d --name some-nginx \
    --network traefik_webgateway \
    --label traefik.docker.network=traefik_webgateway \
    --label traefik.protocol=https \
    --label traefik.frontend.entryPoints=http,https \
    --label traefik.frontend.rule=Host:something.localhost \ # unsure if this is correct to use local host or abc.com
    --label traefik.port=443 \
    --label traefik.frontend.auth.forward.tls.insecureSkipVerify=true \
    container:latest

0 个答案:

没有答案