Docker 个容器 运行 但无法访问它们
Docker containers are running but can't access them
我正在学习 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 I 运行 docker swarm init --advertise-addr=192.168.99.100
指定一个,因为这是命令 docker-machine ip default
的 IP 地址returns
问题
容器的所有 5 个副本都已启动并且 运行 但我无法访问 192.168.99.100:4000 上的应用程序。怎么了?
这是我现在得到的
Debugging commands results
备注:
- 将 Docker 工具箱用于 Windows(Windows 10 主页)
- 我也试过命令
docker swarm init --advertise-addr=192.168.99.100 listen-addr=192.168.99.100
您可以使用长格式在 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 for more information regarding Swarm routing mesh and https://docs.docker.com/compose/compose-file/#long-syntax-1。
我在 Windows 10 上测试了这个,只是 运行 docker stack deploy -c test-compose.yml test
并且在访问 localhost:4000
时可以看到显示 I'm <hostname>
你应该能够重现这个。
您确定您的 python 服务器正在侦听端口 80 并且未绑定到 127.0.0.1 吗?
原来是docker-machine本身出了问题。重新创建后,一切正常。
希望这对大家有帮助
我正在学习 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 I 运行 docker swarm init --advertise-addr=192.168.99.100
指定一个,因为这是命令 docker-machine ip default
的 IP 地址returns
问题 容器的所有 5 个副本都已启动并且 运行 但我无法访问 192.168.99.100:4000 上的应用程序。怎么了?
这是我现在得到的 Debugging commands results
备注:
- 将 Docker 工具箱用于 Windows(Windows 10 主页)
- 我也试过命令
docker swarm init --advertise-addr=192.168.99.100 listen-addr=192.168.99.100
您可以使用长格式在 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 for more information regarding Swarm routing mesh and https://docs.docker.com/compose/compose-file/#long-syntax-1。
我在 Windows 10 上测试了这个,只是 运行 docker stack deploy -c test-compose.yml test
并且在访问 localhost:4000
I'm <hostname>
你应该能够重现这个。 您确定您的 python 服务器正在侦听端口 80 并且未绑定到 127.0.0.1 吗?
原来是docker-machine本身出了问题。重新创建后,一切正常。
希望这对大家有帮助