如果有趣的话: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
错误代码,因为/
没有映射。我对吗?
答案 0 :(得分:2)
好的,所以我只是简单地测试了我拥有的所有端口的切换,因为我确定有什么问题。
在服务配置(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