无法访问在群集集群中运行的Docker容器

时间:2019-02-18 14:23:28

标签: windows docker docker-compose docker-swarm

如果有趣的话:OS:WIN10(cygwin),代码用Java编写。

我遵循了this的示例。

  

我希望使用service(浏览器ir curl)到达运行在端口80上的container前面的myvm1IP:80。不知何故,这行不通。还是我误解了服务的端口映射?

     

*:8080-> 80 / tcp

我有一个正在运行的由2个节点组成的docker swarm集群。 我能够ping通两个正在运行的VM

issues with more recent version numbers一样,我已经降级了版本。使用docker inspect vmName的有关引擎的信息:

    "Engine": {
        "EngineVersion": "18.06.1-ce",
        "Labels": {
            "provider": "hyperv"
        },

我执行了以下docker-compose.yml

version: "3"

services:
  web:
    image: elps/articleservice:1.1.0.4
    deploy:
      replicas: 2
      restart_policy:
        condition: on-failure
    ports:
      - "8080:80"
    environment:
      - MYSQL_HOST=192.168.178.82
      - MYSQL_DB=article
      - MYSQL_USER=root
      - MYSQL_PASSWORD=abcdefg
    networks:
      - webnet    

networks:
  webnet:

两个副本均已成功启动,并且能够连接到本地正在运行的数据库(假设我查看了日志,并且一切正常。)容器已启动并正在运行。

  

docker ps -a的输出

CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS                      PORTS               NAMES
979ed7ea88b7        elps/articleservice:1.1.0.4   "java -jar articlese…"   27 minutes ago      Up 27 minutes               8080/tcp            getstartedlab_web.1.j1j41so8pz6atxqnq9fqqquk7
7684c3667025        elps/articleservice:1.1.0.4   "java -jar articlese…"   27 minutes ago      Up 27 minutes               8080/tcp            getstartedlab_web.2.r4kadvztiwgpckkuannnhcsea
  

docker服务ls的输出

ID                  NAME                MODE                REPLICAS            IMAGE                         PORTS
gvyi9moxtpvq        getstartedlab_web   replicated          2/2                 elps/articleservice:1.1.0.4   *:8080->80/tcp
  

docker-machine ls的输出

NAME    ACTIVE   DRIVER   STATE     URL                         SWARM   DOCKER        ERRORS
myvm1   *        hyperv   Running   tcp://192.168.178.88:2376           v18.06.1-ce
myvm2   -        hyperv   Running   tcp://192.168.178.89:2376           v18.06.1-ce

当我尝试执行curl myvmIP:80时,我会收到

  

无法连接到192.168.178.88端口80:连接被拒绝

作为回应。我期望收到404错误代码,因为/没有映射。我对吗?

1 个答案:

答案 0 :(得分:2)

好的,所以我只是简单地测试了我拥有的所有端口的切换,因为我确定有什么问题。

  • 应用程序本身和容器正在默认端口(8080)上运行
  • 服务器将端口8080上的传入流量重定向到容器端口80(显然没有运行任何内容)

在服务配置(docker-compose.yml)中切换端口后,它可以正常工作。

工作docker-compose.yml如下所示:

version: "3"

services:
  web:
    image: elps/articleservice:1.1.0.4
    deploy:
      replicas: 2
      restart_policy:
        condition: on-failure
    ports:
      - "80:8080"
    environment:
      - MYSQL_HOST=192.168.178.82
      - MYSQL_DB=article
      - MYSQL_USER=root
      - MYSQL_PASSWORD=abcdefg
    networks:
      - webnet    

networks:
  webnet:

因此,进入的流量将按以下方式重定向:

  

传入流量-> 80:Service-> 8080:Container