我目前有两种类型的 Docker 容器:一个 redis 服务器和一个 Node.js 应用程序。只需其中一个,我就可以让他们很好地互动。 Redis 服务器监听默认端口 6379 上的连接。Node.js 应用程序使用以下方式进行连接
const redis_client = redis.createClient({
socket: {
host: 'redis-server', # name of the redis container in my docker-compose.yml
port: 6379,
}
});
并且在其 docker-compose.yml 定义中有
node-app:
# ...other configs...
ports:
- "6379:6379"
这有效,一切都很好。
我现在正在尝试扩展此功能,以允许多个 Node.js 应用容器实例与一个 Redis 容器实例进行交互。我最初尝试添加
deploy:
replicas: 2
到我的节点应用程序定义,但是在$ docker compose up -d
上,这会抛出来自守护程序的错误响应:端口不可用:暴露端口 TCP 0.0.0.0:6379 -> 0.0.0.0:0: 监听 tcp 0.0.0.0:6379: 绑定(bind):每个套接字地址(协议(protocol)/网络地址/端口)通常只允许使用一次。
如何以一种可扩展的方式将多个容器附加到一个容器(即不仅仅是硬编码两个节点应用程序实例)?
最佳答案
为了创建在不同端口上运行但公开相同端口的同一服务的多个副本,请指定一系列端口号,如以下 docker-compose.yml
示例所示:
services:
node-app:
...
ports:
- 6379-6381:5432
deploy:
replicas: 3
...
关于docker - 将多个容器副本连接到单个容器而不会发生端口冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74396097/