如何使用Docker Compose将容器A中的Node.js TCP客户端连接到容器B中的TCP服务器?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Docker Compose将容器A中的Node.js TCP客户端连接到容器B中的TCP服务器?相关的知识,希望对你有一定的参考价值。
我正在尝试将容器A中的TCP客户端连接到容器B中的TCP服务器。运行docker-compose up会导致客户端出现ECONNREFUSED错误。为什么呢?
TCP客户端看起来像这样:
var net = require('net');
var client = new net.Socket();
client.connect(1337, function() {
console.log('Connected');
client.write('Hello, server! Love, Client.');
});
client.on('data', function(data) {
console.log('Received: ' + data);
// client.destroy(); // kill client after server's response
});
client.on('close', function() {
console.log('Connection closed');
});
TCP客户端Dockerfile如下所示:
FROM node:latest
RUN mkdir /app
WORKDIR /app
ADD . /app
ADD package.json /app
RUN npm install
EXPOSE 1337
ENV PATH /app/node_modules/.bin:$PATH
CMD npm start
TCP服务器如下所示:
var net = require('net');
var server = net.createServer(function(socket) {
socket.write('Echo server
');
socket.pipe(socket);
});
server.listen(1337);
TCP服务器Dockerfile如下所示:
FROM node:latest
RUN mkdir /app
WORKDIR /app
ADD . /app
ADD package.json /app
RUN npm install
EXPOSE 1337
ENV PATH /app/node_modules/.bin:$PATH
CMD npm start
docker-compose.yml看起来像这样:
version: "3"
services:
tcpclient:
build: ./tcpclient
ports:
- "8000:8000"
depends_on:
- tcpserver
tcpserver:
build: ./tcpserver
ports:
- "8001:1337"
连接错误如下所示:
tcpclient_1 | > http-service@1.0.0 start /app
tcpclient_1 | > node tcpclient.js
tcpclient_1 |
tcpclient_1 | events.js:137
tcpclient_1 | throw er; // Unhandled 'error' event
tcpclient_1 | ^
tcpclient_1 |
tcpclient_1 | Error: connect ECONNREFUSED 127.0.0.1:1337
tcpclient_1 | at Object._errnoException (util.js:1003:13)
tcpclient_1 | at _exceptionWithHostPort (util.js:1024:20)
tcpclient_1 | at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1194:14)
tcpclient_1 | npm ERR! code ELIFECYCLE
非常感谢帮助
这里有多个问题。我不确定容器中的localhost是否与主机位于同一个界面中。此外,端口绑定是8001.但是,我会重新尝试另一种方法:
使用link
,您可以使用其名称引用其他容器主机。我会尝试:
1)添加tcpclient
容器定义:
links:
- tcpserver
2)在tcp服务器中保留1337:1337(为什么客户端暴露TCP端口btw?)3)使用client.connect(1337, 'tcpserver', function(...){...}
以上是关于如何使用Docker Compose将容器A中的Node.js TCP客户端连接到容器B中的TCP服务器?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 docker-compose.yml 和 ecs-cli 将 EBS 卷附加到我的容器
无法将docker Spring-Boot应用程序与docker-compose中的mysql容器和flyway连接起来