我有两个services
:
服务A:就像数据库服务
服务B:就像后端服务
我希望服务B可以向外界请求(例如curl google.com),还可以使用别名(或其他方式)连接到服务A。 因为,我不想将服务A的IP公开给外部。 容易吗?
docker-compose.yml
看起来像这样:
version: "3"
services:
serviceB:
build: ./serviceB
networks:
- outside
- default
serviceA:
build: ./serviceA
networks:
- default
networks:
outside:
external: true
答案 0 :(得分:1)
绝对不做任何事;删除所有networks:
声明。它将按照您的描述工作。
容器没有“公共IP”;除非您发布了ports:
,否则您将无法从Docker空间外部访问容器。 (一个容器完全具有一个IP地址只是实现细节,它们只能从本机Linux主机上的Docker外部访问,然后只能从同一主机访问;您几乎不需要直接查找或使用它们地址。)
使用现成的Docker设置,容器可以建立出站连接。您无需为此进行任何配置。
只要两个Compose服务位于同一网络(包括自动隐式default
网络)上,它们就可以使用其Compose服务名称作为主机名相互访问。
因此,如果我们将您的docker-compose.yml
文件重写为:
version: "3"
services:
serviceB:
build: ./serviceB
ports: ['3333:3000']
serviceA:
build: ./serviceA
然后:
serviceA
作为主机名来访问服务A(反之亦然)Networking in Compose拥有一些有关工作原理的官方文档。