我正在使用码头工具入门指南: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或邮递员访问它。为什么以及如何解决?
我可以在浏览器中访问我的服务:http://192.168.1.68:80
。
它是领导节点的地址(也是我真机的ip ..)。
但为什么我也不能从localhost这样做呢?
答案 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