Docker容器不响应其他容器请求

时间:2019-09-12 09:58:59

标签: node.js docker coap

我开始使用docker。我正在使用客户端和服务器创建COAP应用程序。在此应用程序中,客户端发送一个简单的请求,而服务器必须对此做出响应。我建立了在node.js中运行我的代码的映像。然后,我使用了docker-compose.yml文件,该文件将在代码部分中显示。但是,服务器似乎没有响应客户端请求。

我试图查看IP地址是否分配正确,并且一切正常。我还尝试在docker0上使用Wireshark,可以看到coap数据包从客户端发送到服务器,但是我没有答案。这是docker-compose.yml

QString srch(contentt + " " + "Profile");
int pos = content.indexOf(srch);
QString srch2("###");
int pos2 = content.indexOf(srch2);
if ( pos1 >= 0 && pos2 >= 0)
    QString restOfLine = content.mid(pos1, pos2-pos1);

这是客户端代码:

services:
 Server_Coap:
  build: './Server_Coap'
  image: 'user/mynode:latest'
  container_name: server
  ports: 
  - "8081:5683"
  networks:
   rete:
    ipv4_address: 172.19.0.3
networks:
 rete:
   ipam:
    driver: default
    config:
     - subnet: 172.19.0.0/24

这是服务器代码:

const coap = require('coap'),
req = coap.request('coap://172.19.0.3')
console.log("Client Request...")
req.on('response' , function(res){
    res.pipe(process.stdout)
})

req.end()

这是我的服务器Dockerfile:

var coap = require('coap')
,server = coap.createServer()


server.on('request' , function(req, res){
    console.log("New request")
    res.end('Hello ' + req.url + '\n')
})

// the default CoAP port is 5683
server.listen(function() {
    console.log("Server started")
  })

这是我的客户端Dockerfile:

FROM node:latest

WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install 
COPY . .
EXPOSE 5683
CMD ["node" , "server.js"]

我想从服务器那里得到答案。 这是我得到的那种错误:                                                                                                       │ 错误:247秒内无回复│     超时._onTimeout(/usr/src/app/node_modules/coap/lib/retry_send.js:74:16)│     在listOnTimeout(internal / timers.js:531:17)│     在processTimers上(internal / timers.js:475:7)│ 在以下位置发出OutgoingMessage实例上的“错误”事件:     在RetrySend.emit(events.js:209:13)│     于Timeout._onTimeout(/usr/src/app/node_modules/coap/lib/retry_send.js:77:12)│     在listOnTimeout(internal / timers.js:531:17)│     在processTimers(internal / timers.js:475:7){│   retransmitTimeout:247

3 个答案:

答案 0 :(得分:1)

您必须将客户端泊坞窗添加到网络。 IE:

services:
 Server_Coap:
  build: './Server_Coap'
  image: 'user/mynode:latest'
  container_name: server
  ports: 
  - "8081:5683"
  networks:
   rete:
    ipv4_address: 172.19.0.3
 Client_Coap:
  build: './Client_Coap'
  image: 'user/mynode:latest'
  container_name: client
  networks:
   rete
networks:
 rete:
   ipam:
    driver: default
    config:
     - subnet: 172.19.0.0/24

答案 1 :(得分:0)

从docker-compose中删除不必要的网络设置。

services:
 Server_Coap:
  build: './Server_Coap'
  image: 'user/mynode:latest'
  container_name: server
  ports: 
  - "8081:5683"

并将其修改为localhost,我假设它们在同一容器中运行。如果要从外部访问,则需要提及发布端口8081

const coap = require('coap'),
req = coap.request('coap://localhost')
console.log("Client Request...")
req.on('response' , function(res){
    res.pipe(process.stdout)
})

req.end()
  • 如果将coap客户端放在其他容器中,最好将它们放在单个撰写文件中,并且两者都可以在同一网络上进行通话。

  • 如果coap在容器外部的主机上运行,​​则可以在客户端使用localhost:8081进行连接。

  • 如果coap在其他容器中运行,请在客户端使用主机ip。 host_ip:8081从客户端进行连接。

要通过不同的网络进行连接,这是通过主机ip与发布端口进行连接的唯一方法,否则客户端将无法访问它。

docker run --add-host=coab-server:YOUR_HOST_IP --rm -it coad-client

此修改客户端之后。

req = coap.request('coap://coab-server')

如果您不想使用网络,也建议使用相同的端口"5683:5683",因为我看不到port选项,也可以尝试。

req = coap.request('coap://coab-server')

或使用当前端口

req = coap.request('coap://coab-server:8081')

答案 2 :(得分:0)

通常使用基于UDP的CoAP,因此必须将端口分类为udp

 ports: 
  - "8081:5683/udp"