无法到达 swarm 集群中的 docker 容器 运行
Can not reach docker container running in a swarm cluster
如果这很有趣:OS: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
如果这很有趣:OS:WIN10 (cygwin),代码写在Java
。
我遵循了 this 的例子。
I'd expect to reach the
service
in front of thecontainer
, which is running on port 80, usingmyvm1IP: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