尝试通过Docker Swarm上的Traefik连接到服务时出现“错误请求”响应

时间:2018-07-25 17:37:50

标签: docker-compose docker-swarm traefik slimerjs

我有一个在两个节点(管理者节点和工作节点)上运行的Docker Swarm。该群有两个服务。一种服务是在工作程序节点上运行的SlimerJS服务器,该服务器使用以下Dockerfile创建:

FROM evpavel/slimerjs-alpine:latest

RUN mkdir /usr/local/slimerjs-server
COPY server.js /usr/local/slimerjs-server

EXPOSE 8910
ENTRYPOINT slimerjs --headless /usr/local/slimerjs-server/server.js $(hostname -i) 8910

该脚本带有两个命令行参数:IP地址和要侦听的端口。使用$(hostname -i)传递容器的IP地址。我使用端口8910。检查容器的日志,使用正确的IP地址和端口成功创建了服务器。但是,它不会在收到请求时记录日志。

另一个服务是在管理器节点上运行的Traefik。我已经通过访问在工作节点上运行的Apache服务器进行了测试,它似乎可以正常工作。在Traefik的仪表板上,前端规则只是我的管理者节点的IP(主机:123.456.789.100),后端有一台服务器,其容器的IP为{http://10.0.0.14:8910)。

这是我用来部署堆栈的docker-compose文件:

version: "3.2"

services:

  headlessbrowser:
    image: sgsmcall/webpage-layout-probing-server:0.3
    deploy:
      restart_policy:
        condition: on-failure
      placement:
        constraints: [node.role == worker]
      labels:
        - "traefik.docker.network=comp390_webnet"
        - "traefik.port=8910"
        - "traefik.frontend.entryPoints http"
        - "traefik.frontend.rule=Host:123.456.789.100"
    ports:
      - "8910"
    networks:
      - webnet

  loadbalancer:
    image: traefik
    command: --docker \
      --docker.swarmmode \
      --docker.watch \
      --web \
      --loglevel=DEBUG
    ports:
      - 80:80
      - 8080:8080
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    deploy:
      restart_policy:
        condition: on-failure
      update_config:
        delay: 2s
      placement:
         constraints: [node.role == manager]
    networks:
      - webnet

networks:
  webnet:
    driver: overlay

那是什么问题?每当我尝试通过管理器的IP(123.456.789.100)访问SlimerJS服务器时,我都会在纯文本响应中收到“错误请求”。作为独立容器运行时,我可以连接到它。我已经检查了traefik服务的日志,该服务肯定是将HTTP请求发送到SlimerJS服务器。我正在发送的HTTP请求(简单的GET请求)中没有任何内容引起我的注意。

我很困惑,有人对这个问题有任何想法吗?

0 个答案:

没有答案