gpt4 book ai didi

docker - Docker-compose无法解析DNS来纠正服务

转载 作者:行者123 更新时间:2023-12-02 18:54:47 26 4
gpt4 key购买 nike

我有两个服务,webhelloworld。以下是我的docker-compose YAML文件:

version: "3"

services:
helloworld:
build: ./hello
volumes:
- ./hello:/usr/src/app
ports:
- 5001:80
web:
build: ./web
volumes:
- ./web:/usr/share/nginx/html
ports:
- 5000:80
depends_on:
- helloworld

在Web的 index.html内部,我做了一个按钮,当单击该按钮时会打开 http://helloworld。但是,我的按钮最终转到了 helloworld.com而不是正确的服务。当我执行 localhost:5001localhost:5000时,两种服务都可以正常工作。我想念什么吗?

最佳答案

Docker用于服务发现的嵌入式DNS用于容器到容器的网络。对于来自Docker外部的连接(例如从您的浏览器),您需要发布端口(例如文件中的5000和5001)并连接到该发布的端口。

要使用容器到容器网络,您将需要在Web容器内部进行DNS查找,并且需要从Web到helloworld的连接,而不是从浏览器到容器的连接。

编辑:从您的评论,您可能会发现反向代理很有帮助。 Traefik和nginx-proxy是其中的两个示例。您可以将它们配置为通过主机名或虚拟路径转发到容器,在您的情况下,我认为基于路径的路由会更容易。生成的撰写文件如下所示:

version: "3"

services:
traefik:
image: traefik
command: --docker --docker.watch
volumes:
- /var/lib/docker.sock:/var/lib/docker.sock
ports:
- 8080:80

helloworld:
build: ./hello
volumes:
- ./hello:/usr/src/app
labels:
- traefik.frontend.rule=PathPrefixStrip:/helloworld
- traefik.port=80

web:
build: ./web
volumes:
- ./web:/usr/share/nginx/html
labels:
- traefik.frontend.rule=PathPrefixStrip:/
- traefik.port=80

上面的所有内容都是未经测试的,但是应该可以帮助您找到正确的方向。使用PathPrefixStrip规则,您可以在Web中建立到“/ helloworld”的链接,该链接将转到另一个容器。由于链接没有主机名或端口,因此它将转到您已经在使用的traefik主机名/端口。

关于docker - Docker-compose无法解析DNS来纠正服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44528384/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com