Docker 容器正在运行但无法访问它们

问题描述 投票:0回答:3

我正在学习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 上的应用程序。怎么了?

这是我现在得到的

Debugging commands results

备注:

    使用适用于 Windows 的 Docker Toolbox(Windows 10 家庭版)
  • 我也尝试了命令
  • docker swarm init --advertise-addr=192.168.99.100 listen-addr=192.168.99.100
    
    
docker docker-for-windows
3个回答
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 集群的任何节点上的服务。

有关 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 吗?


0
投票
原来是docker-machine本身出了问题。重新创建后,一切正常。

希望这对任何人都有帮助


0
投票
对于我的问题,我必须停止然后通过命令行重新启动 docker damon:

sudo systemctl stop docker
然后:

sudo systemctl start docker
一切都恢复在线。

© www.soinside.com 2019 - 2024. All rights reserved.