【发布时间】:2019-04-20 18:51:51
【问题描述】:
我在端口 80 中使用带有 api 网关的容器,并且我需要在另一个容器之间通信 api 网关(所有这些容器都使用 dockerfile 和 docker-compose)。我怎样才能让这些其他容器不将端口暴露给 localhost 但在内部与 api 网关通信?
我的 docker-compose:
version: '3'
services:
app:
build:
context: .
dockerfile: Dockerfile
volumes:
- ./:/usr/src/app
- /usr/src/app/node_modules
ports:
- "3000:3000"
解决方案:
将 docker-compose 文件更改为:
version: '3.5'
services:
app:
build:
context: .
dockerfile: Dockerfile
volumes:
- ./:/usr/src/app
- /usr/src/app/node_modules
expose:
- "3000"
image: api-name-service
container_name: api-name-service
networks:
- api-network
networks:
api-network:
name: api-network-service
当服务在同一网络中时,此服务可以使用服务名称进行通信,例如“http://api-name-service:3000”。
【问题讨论】:
-
我不太确定你在问什么——你能试着改一下这个问题吗?
-
嗨@duhaime。我只需要一个端点来连接外部访问(我的 api 网关 - 端口 80)。其他容器和其他端口,我试图不公开这个端口,因为没有外部连接,但可以在 api 网关和这些其他容器之间访问。
-
对不起,我还不清楚。您在某个主机上有一个 API,并希望其他主机能够与该 API 通信,但您不想“暴露”它们通信的端口?你能定义“暴露”吗?这都是 TCP 通信吗?
-
@duhaime 对此感到抱歉,感谢您的帮助。想象一下,我的本地主机中有一些容器。只有一个容器接收外部访问。其他人无法接收外部访问,但需要与此特定容器进行内部通信。
-
但是您只定义了一个服务,您还需要与
app通信的其他容器是什么?它们在哪里定义?如果您在app旁边声明另一个服务,它们都将能够通过名称发现彼此。
标签: docker docker-compose dockerfile