我正在学习docker,并且从Official get started Tutorial开始。
我的问题在步骤3上。
这是我的docker-compose.yml文件(与教程中的文件相同)
version: "3"
services:
web:
# replace username/repo:tag with your name and image details
image: username/repo:tag
deploy:
replicas: 5
resources:
limits:
cpus: "0.1"
memory: 50M
restart_policy:
condition: on-failure
ports:
- "4000:80"
networks:
- webnet
我遵循了link中的说明。
唯一不同的是,当我运行docker swarm init
并得到此响应守护程序的错误响应时:无法选择要发布的IP地址,因为此系统在不同接口上有多个地址(eth0上为10.0.2.15和eth1上的192.168.99.100)-使用--advertise-addr 指定一个,我运行了docker swarm init --advertise-addr=192.168.99.100
,因为这是命令docker-machine ip default
返回的IP地址
问题 容器的所有5个副本都已启动并正在运行,但是我无法访问192.168.99.100:4000上的应用程序。怎么了?
这就是我现在得到的 Debugging commands results
注释:
docker swarm init --advertise-addr=192.168.99.100 listen-addr=192.168.99.100
命令答案 0 :(得分:1)
您可以使用长格式在docker-compose.yml文件中声明端口,例如以下文件test-compose.yml
:
version: "3.6"
services:
web:
image: jwilder/whoami:latest
deploy:
replicas: 5
resources:
limits:
cpus: "0.1"
memory: 50M
restart_policy:
condition: on-failure
ports:
- target: 8000
published: 4000
protocol: tcp
mode: ingress
networks:
- webnet
networks:
webnet:
driver: overlay
在进入模式下,您应该能够在端口80上的Swarm群集的任何节点上访问该服务。
请参阅https://docs.docker.com/engine/swarm/ingress/#using-the-routing-mesh,以了解有关Swarm路由网格的更多信息,以及https://docs.docker.com/compose/compose-file/#long-syntax-1,以了解长端口语法。
我在Windows 10上进行了测试,只是运行了docker stack deploy -c test-compose.yml test
,并且在访问I'm <hostname>
时可以看到显示的localhost:4000
您应该能够重现此内容。 您确定您的python服务器正在侦听端口80并且未绑定到127.0.0.1吗?
答案 1 :(得分:0)
结果证明docker-machine本身有问题。重新创建后,一切正常。
希望这对任何人都有帮助