Docker 容器不响应另一个容器请求
Docker Container doesn't answer to another container requests
我开始使用 docker。我正在创建一个带有客户端和服务器的 COAP 应用程序。在这个应用程序中,客户端发送一个简单的请求,服务器必须响应它。我构建了在 node.js 中运行我的代码的图像。然后我使用了一个 docker-compose.yml 文件,我将在代码部分向您展示该文件。但是,服务器似乎没有响应客户端请求。
我试着查看IP地址是否分配好,似乎一切正常。我还尝试在 docker0 上使用 Wireshark,我可以看到从客户端到服务器的 coap 数据包,但我没有答案。这是docker-compose.yml
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()
服务器代码如下:
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"]
这是我的客户端 Dockerfile:
FROM node:latest
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 5683
CMD ["node" , "client.js"]
我想从服务器得到一个答案。
这是我得到的错误类型:
│
错误:247 秒内无回复 │
在 Timeout._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 实例上发出 'error' 事件:│
在 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) { │
重传超时:247
从 docker-compose 中删除不必要的网络设置。
services:
Server_Coap:
build: './Server_Coap'
image: 'user/mynode:latest'
container_name: server
ports:
- "8081:5683"
并将其修改为本地主机,我假设它们在同一个容器中 运行。如果您想从外部访问,则需要提及发布端口 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 客户端在其他容器中,最好将它们放在单个 compose 文件中,这样两者都可以在同一网络上通信。
如果 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"
,因为我看不到端口选项,或者你可以试试。
req = coap.request('coap://coab-server')
或使用当前端口
req = coap.request('coap://coab-server:8081')
您必须将您的客户端 docker 添加到网络中。即:
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
通常使用 CoAP over UDP,因此端口必须分类为 udp
ports:
- "8081:5683/udp"
我开始使用 docker。我正在创建一个带有客户端和服务器的 COAP 应用程序。在这个应用程序中,客户端发送一个简单的请求,服务器必须响应它。我构建了在 node.js 中运行我的代码的图像。然后我使用了一个 docker-compose.yml 文件,我将在代码部分向您展示该文件。但是,服务器似乎没有响应客户端请求。
我试着查看IP地址是否分配好,似乎一切正常。我还尝试在 docker0 上使用 Wireshark,我可以看到从客户端到服务器的 coap 数据包,但我没有答案。这是docker-compose.yml
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()
服务器代码如下:
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"]
这是我的客户端 Dockerfile:
FROM node:latest
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 5683
CMD ["node" , "client.js"]
我想从服务器得到一个答案。 这是我得到的错误类型: │ 错误:247 秒内无回复 │ 在 Timeout._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 实例上发出 'error' 事件:│ 在 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) { │ 重传超时:247
从 docker-compose 中删除不必要的网络设置。
services:
Server_Coap:
build: './Server_Coap'
image: 'user/mynode:latest'
container_name: server
ports:
- "8081:5683"
并将其修改为本地主机,我假设它们在同一个容器中 运行。如果您想从外部访问,则需要提及发布端口 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 客户端在其他容器中,最好将它们放在单个 compose 文件中,这样两者都可以在同一网络上通信。
如果 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"
,因为我看不到端口选项,或者你可以试试。
req = coap.request('coap://coab-server')
或使用当前端口
req = coap.request('coap://coab-server:8081')
您必须将您的客户端 docker 添加到网络中。即:
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
通常使用 CoAP over UDP,因此端口必须分类为 udp
ports:
- "8081:5683/udp"