如何在 Traefik v1.7 中使用特定的 http 端口?
How to use a specific http port in Traefik v1.7?
为了在 docker 个容器中使用粘性会话,我使用的是 Traefik v1.7。
但我不会通过特定端口更改 http 端口 80,例如8081.
我在Traefik中使用80端口是可以的:
docker network create mynetwork -d overlay
docker service create --name mynginx --mode replicated --replicas 2 \
--network mynetwork --publish "80:8085" nginx
docker service update
--label-add "traefik.docker.network=mynetwork" \
--label-add "traefik.port=8085" \
--label-add "traefik.frontend.rule=PathPrefix:/" \
--label-add "traefik.backend.loadbalancer.stickiness=true" \
mynginx
docker service create
--name traefik
-p8080:80 -p9090:8080 \
--mount type=bind,source=/var/run/docker.sock,destination=/var/run/docker.sock \
--mode=global \
--network mynetwork \
traefik \
--docker \
--docker.swarmmode \
--docker.watch \
--web \
--loglevel=DEBUG
但是当我把端口80改成8081时,Traefik服务不工作了:
docker network create mynetwork -d overlay
docker service create --name mynginx --mode replicated --replicas 2 \
--network mynetwork --publish "8081:8085" nginx
docker service update
--label-add "traefik.docker.network=mynetwork" \
--label-add "traefik.port=8085" \
--label-add "traefik.frontend.rule=PathPrefix:/" \
--label-add "traefik.backend.loadbalancer.stickiness=true" \
mynginx
docker service create
--name traefik
-p8080:8081 -p9090:8080 \
--mount type=bind,source=/var/run/docker.sock,destination=/var/run/docker.sock \
--mode=global \
--network mynetwork \
traefik:v1.7 \
--docker \
--docker.swarmmode \
--docker.watch \
--web \
--loglevel=DEBUG
谢谢。
你不能,因为 traefik 暴露了端口 80。
如果您键入这些命令:
docker pull traefik:v1.7
docker image history traefik:v1.7
输出为:
IMAGE CREATED CREATED BY SIZE COMMENT
80ab7ee8304c 3 months ago /bin/sh -c #(nop) LABEL org.opencontainers.… 0B
<missing> 3 months ago /bin/sh -c #(nop) ENTRYPOINT ["/traefik"] 0B
<missing> 3 months ago /bin/sh -c #(nop) VOLUME [/tmp] 0B
<missing> 3 months ago /bin/sh -c #(nop) EXPOSE 80 0B
<missing> 3 months ago /bin/sh -c #(nop) COPY file:8e3cf7c133ac957e… 75MB
<missing> 8 months ago /bin/sh -c #(nop) COPY dir:e700a731062c6a113… 1.16MB
<missing> 8 months ago /bin/sh -c #(nop) COPY file:c1f4ee36c6a15bdd… 233kB
有一条 EXPOSE 80
行表示如果您从此映像创建容器,进程将侦听容器内的端口 80。
当你使用参数 -p 8080:80
时,你说 docker 打开主机上的 8080 端口并将其映射到容器内的 80 端口。这是有效的,因为进程正在监听 !
中的端口 80
否则,-p 8080:8081
,docker 将容器内的 8080 映射到 8081,并且无法通过此端口访问,因为 traefik 正在侦听端口 80。
也许你想在主机上通过 8081 读取 traefik,然后使用 -p 8081:80
。在所有情况下,第二个数字必须是 80,除非你可以通过 traefik 配置更改容器内的监听端口。
我已经通过以下方式解决了我的问题并使用了Traefik v2.3。
当访问80端口时,Traefik会显示服务whoami,当访问9086端口时,Traefik会显示服务mynginximage2.
version: "3.8"
services:
traefik:
image: traefik:v2.3
deploy:
mode: global
networks:
- traefik-net
command:
#- "--log.level=DEBUG"
- "--api.insecure=true"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
- "--entrypoints.mynginximage2_ep.address=:8086"
ports:
- 80:80
- 9086:8086
- 8080:8080
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
whoami:
image: "traefik/whoami"
deploy:
replicas: 2
networks:
- traefik-net
labels:
- "traefik.enable=true"
- "traefik.http.routers.whoami.entrypoints=web"
- "traefik.http.routers.whoami.rule=Host(`192.168.0.1`) || Host(`192.168.0.2`)"
- "traefik.http.services.whoami-service.loadbalancer.server.port=80"
mynginximage2:
image: mynginximage2
deploy:
replicas: 2
networks:
- traefik-net
#ports:
# - 9080:8086
labels:
- "traefik.enable=true"
- "traefik.http.routers.mynginximage2.entrypoints=mynginximage2_ep"
- "traefik.http.routers.mynginximage2.rule=Host(`192.168.0.1`) || Host(`192.168.0.2`)"
- "traefik.http.services.mynginximage2-service.loadbalancer.server.port=8086"
networks:
traefik-net:
external: true
name: traefik-net
为了在 docker 个容器中使用粘性会话,我使用的是 Traefik v1.7。 但我不会通过特定端口更改 http 端口 80,例如8081.
我在Traefik中使用80端口是可以的:
docker network create mynetwork -d overlay
docker service create --name mynginx --mode replicated --replicas 2 \
--network mynetwork --publish "80:8085" nginx
docker service update
--label-add "traefik.docker.network=mynetwork" \
--label-add "traefik.port=8085" \
--label-add "traefik.frontend.rule=PathPrefix:/" \
--label-add "traefik.backend.loadbalancer.stickiness=true" \
mynginx
docker service create
--name traefik
-p8080:80 -p9090:8080 \
--mount type=bind,source=/var/run/docker.sock,destination=/var/run/docker.sock \
--mode=global \
--network mynetwork \
traefik \
--docker \
--docker.swarmmode \
--docker.watch \
--web \
--loglevel=DEBUG
但是当我把端口80改成8081时,Traefik服务不工作了:
docker network create mynetwork -d overlay
docker service create --name mynginx --mode replicated --replicas 2 \
--network mynetwork --publish "8081:8085" nginx
docker service update
--label-add "traefik.docker.network=mynetwork" \
--label-add "traefik.port=8085" \
--label-add "traefik.frontend.rule=PathPrefix:/" \
--label-add "traefik.backend.loadbalancer.stickiness=true" \
mynginx
docker service create
--name traefik
-p8080:8081 -p9090:8080 \
--mount type=bind,source=/var/run/docker.sock,destination=/var/run/docker.sock \
--mode=global \
--network mynetwork \
traefik:v1.7 \
--docker \
--docker.swarmmode \
--docker.watch \
--web \
--loglevel=DEBUG
谢谢。
你不能,因为 traefik 暴露了端口 80。
如果您键入这些命令:
docker pull traefik:v1.7
docker image history traefik:v1.7
输出为:
IMAGE CREATED CREATED BY SIZE COMMENT
80ab7ee8304c 3 months ago /bin/sh -c #(nop) LABEL org.opencontainers.… 0B
<missing> 3 months ago /bin/sh -c #(nop) ENTRYPOINT ["/traefik"] 0B
<missing> 3 months ago /bin/sh -c #(nop) VOLUME [/tmp] 0B
<missing> 3 months ago /bin/sh -c #(nop) EXPOSE 80 0B
<missing> 3 months ago /bin/sh -c #(nop) COPY file:8e3cf7c133ac957e… 75MB
<missing> 8 months ago /bin/sh -c #(nop) COPY dir:e700a731062c6a113… 1.16MB
<missing> 8 months ago /bin/sh -c #(nop) COPY file:c1f4ee36c6a15bdd… 233kB
有一条 EXPOSE 80
行表示如果您从此映像创建容器,进程将侦听容器内的端口 80。
当你使用参数 -p 8080:80
时,你说 docker 打开主机上的 8080 端口并将其映射到容器内的 80 端口。这是有效的,因为进程正在监听 !
否则,-p 8080:8081
,docker 将容器内的 8080 映射到 8081,并且无法通过此端口访问,因为 traefik 正在侦听端口 80。
也许你想在主机上通过 8081 读取 traefik,然后使用 -p 8081:80
。在所有情况下,第二个数字必须是 80,除非你可以通过 traefik 配置更改容器内的监听端口。
我已经通过以下方式解决了我的问题并使用了Traefik v2.3。 当访问80端口时,Traefik会显示服务whoami,当访问9086端口时,Traefik会显示服务mynginximage2.
version: "3.8"
services:
traefik:
image: traefik:v2.3
deploy:
mode: global
networks:
- traefik-net
command:
#- "--log.level=DEBUG"
- "--api.insecure=true"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
- "--entrypoints.mynginximage2_ep.address=:8086"
ports:
- 80:80
- 9086:8086
- 8080:8080
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
whoami:
image: "traefik/whoami"
deploy:
replicas: 2
networks:
- traefik-net
labels:
- "traefik.enable=true"
- "traefik.http.routers.whoami.entrypoints=web"
- "traefik.http.routers.whoami.rule=Host(`192.168.0.1`) || Host(`192.168.0.2`)"
- "traefik.http.services.whoami-service.loadbalancer.server.port=80"
mynginximage2:
image: mynginximage2
deploy:
replicas: 2
networks:
- traefik-net
#ports:
# - 9080:8086
labels:
- "traefik.enable=true"
- "traefik.http.routers.mynginximage2.entrypoints=mynginximage2_ep"
- "traefik.http.routers.mynginximage2.rule=Host(`192.168.0.1`) || Host(`192.168.0.2`)"
- "traefik.http.services.mynginximage2-service.loadbalancer.server.port=8086"
networks:
traefik-net:
external: true
name: traefik-net