Docker-compose不能parsingDNS来纠正服务
我有两个服务, web
和helloworld
。 以下是我的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
里面,我点了一个button打开http://helloworld
。 但是,我的button结束了去helloworld.com
而不是正确的服务。 当我做localhost:5001
和localhost:5000
时,这两个服务都正常工作。 我错过了什么吗?
Docker用于服务发现的embedded式DNS用于容器到容器的联网。 对于从docker以外的连接(例如从您的浏览器),您需要发布端口(例如文件中的5000和5001)并连接到该发布的端口。
要使用容器到容器联网,您需要在Web容器内部进行DNS查找,并且需要从web到helloworld而不是从浏览器到容器的连接。
编辑:从您的评论,你可能会发现反向代理有帮助。 Traefik和nginx-proxy就是两个例子。 您可以configuration这些以通过主机名或虚拟path转发到容器,在您的情况下,我认为基于path的路由会更容易。 生成的组合文件将如下所示:
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
以上所有内容都没有经过我的头顶configuration,但应该让你朝正确的方向发展。 使用PathPrefixStrip规则,您可以在Web中创build一个链接到“/ helloworld”,该链接将转到另一个容器。 而且由于链接没有主机名或端口,它将转到您已经使用的相同的traefik主机名/端口。