不会通过“ docker ps”命令报告使用traefik反向代理服务使用的端口

时间:2019-06-04 10:06:36

标签: docker traefik

“ 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

2 个答案:

答案 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命令中,您在其中看到的端口包括映像中定义的“暴露的端口”。这些是从图像创建者到图像用户的文档,它们期望在此端口上的容器内部监听某些内容,并且绝不会影响主机或容器到容器网络上的已发布端口。