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-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本身出了问题。重新创建后,一切正常。

希望这对大家有帮助