docker - 如何在容器之间进行通信?
问题描述
我在端口 80 中使用带有 api 网关的容器,并且我需要在另一个容器之间通信 api 网关(所有这些都使用 dockerfile 和 docker-compose)。我怎样才能让这些其他容器不将端口暴露给 localhost 但在内部与 api 网关通信?
我的码头工人撰写:
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 ”。
解决方案
您想使用expose
而不是ports
:
https://docs.docker.com/compose/compose-file/compose-file-v2/#expose
例如:
services:
app1:
expose:
- "3000"
app2:
...
假设 app1 的 3000 端口上有一些 API,那么 app2 就可以访问http://app1:3000/api
推荐阅读
- assembly - 某个字符在字符串中出现的次数(汇编emu8086)
- css - 按类强制 Bootstrap 4 断点(用于预览)
- css - 边框半径和背景剪辑在伪元素上未按预期工作
- c++ - 在 GCC 中使用为类打包的属性
- mysql - 根据 id 列的值将一个 sql 列转换为两个
- java - 在 Internet 连接丢失/增益时恢复 Exoplayer 直播
- r - 如何从 R Shiny Session 中返回值
- google-apps-script - Google 文档中的 body.replaceText()
- c# - 玩家未正确传送(MissingReferenceException)
- mpi - 为什么在 MPI_Init 之前要做最少的工作?