windows - 无法访问在 swarm 集群中运行的 docker 容器

标签 windows docker docker-compose docker-swarm

如果这很有趣:操作系统:WIN10 (cygwin),用 Java 编写的代码。

我关注了this例子。

I'd expect to reach the service in front of the container, which is running on port 80, using myvm1IP:80 (browser ir curl). Somehow this does not work. Or am I missunderstoonding the port mapping of the service?

*:8080->80/tcp

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

我已经降级了版本因为有 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:

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

Output of 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

Output of docker service ls

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

Output of 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 时,我收到了

Failed to connect to 192.168.178.88 port 80: Connection refused

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

最佳答案

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

  • 应用程序本身和容器在默认端口 (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:

因此传入流量将按如下方式重定向:

Incoming traffic -> 80:Service->8080:Container

关于windows - 无法访问在 swarm 集群中运行的 docker 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54749351/

相关文章:

c - 多维数组和dll劫持

docker - 我自己对 boot2docker 的自定义没有反射(reflect)到 iso 镜像中

docker - 重新启动 docker 服务会杀死所有容器吗?

scala - 如何使用 sbt-native-packager 在 Docker 中使二进制文件可执行?

windows - 如何从 Windows 8.1 读取嵌入式 Controller 版本?

Windows 命令行和批处理文件 : potential problems with unescaped special characters in filenames?

windows - 只显示全屏图像的exe

mysql - 从主机网络的sql-client连接到docker容器时出错

django - 在docker-compose break run中使用network_mode ='host':主机类型网络不能与链接一起使用

docker-compose 不接受我的卷声明