“ docker ps”命令未显示traefik端口8080和该服务使用的其他端口
traefik服务在docker-compose.yml中定义如下:
...
traefik:
image: traefik:1.7-alpine
command: --docker --docker.swarmMode --docker.domain=mylocal.swarm --docker.watch --api --logLevel=INFO \
--entryPoints='Name:http Address::80' \
--entryPoints='Name:https Address::443 TLS'
networks:
- net-traefik
deploy: *default-deploy
ports:
- "8091:80"
- "8093:443"
- "8080:8080"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
logging: *default-logging
“ docker ps”命令输出为:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
...
635a4e017bb5 traefik:1.7-alpine "/entrypoint.sh o…" … … 80/tcp
...
为什么只显示端口80?我预计还会找到443和8080
答案 0 :(得分:0)
此端口80
只是在EXPOSE
in the Dockerfile下指定的端口,因此显示在此处。您在文件中定义的其他端口将映射到使用Docker Swarm创建的 service ,而不是单个容器。如果发生这种情况,那么根本就不使用Swarm,因为如果您有多个容器(使用Swarm就是其中一个点),则它们不能同时映射到同一端口。
This blog post似乎包含有关Docker Swarm如何发布服务的一些很好的信息。
答案 1 :(得分:0)
在群集模式下,端口未发布在各个容器上。而是通过服务发布端口,该服务随后使用VIP通过入口网络将请求发送到服务的副本之一。您可以使用以下命令查看这些端口:
docker service ls
请注意,在docker ps
命令中,您在其中看到的端口包括映像中定义的“暴露的端口”。这些是从图像创建者到图像用户的文档,它们期望在此端口上的容器内部监听某些内容,并且绝不会影响主机或容器到容器网络上的已发布端口。