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

时间:2019-01-05 12:22:01

标签: docker docker-for-windows

我正在学习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 Toolbox for Windows(Windows 10 Home)
  • 我也尝试了docker swarm init --advertise-addr=192.168.99.100 listen-addr=192.168.99.100命令

2 个答案:

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

希望这对任何人都有帮助