可以从curl访问docker服务,但不能从postman / chrome

时间:2017-10-18 16:10:39

标签: curl docker

我正在使用码头工具入门指南:https://docs.docker.com/get-started/part3/#recap-and-cheat-sheet-optional

搬运工-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:
      - "80:80"
    networks:
      - webnet
networks:
  webnet:

我通过运行docker stack deploy -c docker-compose.yml getstartedlab部署了我的应用。 然后从curl访问我的服务,工作正常curl -4 http://localhost

<h3>Hello World!</h3><b>Hostname:</b> 1532cae6e06f<br/>....

但是我无法通过转到http://localhost:80(它永远加载)从Chrome或邮递员访问它。为什么以及如何解决?

更新19/10/17:

我可以在浏览器中访问我的服务:http://192.168.1.68:80。 它是领导节点的地址(也是我真机的ip ..)。

但为什么我也不能从localhost这样做呢?

2 个答案:

答案 0 :(得分:12)

看到curl -4 ...让我怀疑这是一个ipv6问题。如果没有为ipv6配置本地计算机,并且localhost在hosts文件中引用了ipv6地址,则对localhost的调用将挂起。

解决方法相当简单,在您的网址中转到127.0.0.1而不是localhost

答案 1 :(得分:1)

尝试使用bridge network。桥接网络将与主机共享资源网络。例如,如果您使用端口80:80在Web conatiner中设置,则可以使用localhost:80进行访问。 所以在您的docker-compose文件中添加driver: bridge,就像这样

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:
      - "80:80"
    networks:
      - webnet
networks:
  webnet:
   driver: bridge