我正在学习docker,已经开始学习官方入门教程。
我的问题出在第 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
我按照链接中的说明进行操作。 唯一不同的是,当我运行
docker swarm init
并得到此响应时 来自守护程序的错误响应:无法选择要通告的 IP 地址,因为该系统在不同接口上有多个地址(eth0 上的 10.0.2.15 和 192.168.99.100在 eth1 上) - 使用 --advertise-addr 指定一个,我运行了 docker swarm init --advertise-addr=192.168.99.100
,因为这是命令
docker-machine ip default
返回的 IP 地址
问题 容器的所有 5 个副本均已启动并正在运行,但我无法访问 192.168.99.100:4000 上的应用程序。怎么了?
这是我现在得到的备注:
docker swarm init --advertise-addr=192.168.99.100 listen-addr=192.168.99.100
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 集群的任何节点上的服务。
有关 Swarm 路由网格的更多信息,请参阅
https://docs.docker.com/engine/swarm/ingress/#using-the-routing-mesh 和 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 吗?
希望这对任何人都有帮助
sudo systemctl stop docker
然后:
sudo systemctl start docker
一切都恢复在线。