Я запускаю простое Nodejs приложение с 2 контейнерами. Контейнер сервера и клиент. У меня есть настройки, так что когда клиент отправляет запрос на сервер, он передает некоторые данные обратно клиенту, однако, когда я пытаюсь сделать этот запрос от клиента, я получаю следующую ошибку
connect ECONNREFUSED 127.0.0.1:8080
Это также тот случай, когда я использую IP-адрес контейнера. Оба контейнера находятся в одной сети. Я подтвердил это с проверкой сети docker. Когда я делаю тот же запрос через Почтальон, он работает нормально.
Вот мои настройки
Настройка сервера
Dockerfile сервера
FROM node:12
EXPOSE 8080
WORKDIR /home/node/server
COPY package*.json ./
RUN npm install
COPY . .
CMD ["node", "app.js"]
Функция http сервера
http.createServer(function(request, response){
filePath = path.join("./serverdata", 'filename.txt');
var stat = fs.statSync(filePath);
response.writeHead(200, {
'Content-Type': 'text/plain',
'Content-Length': stat.size
});
var readStream = fs.createReadStream(filePath);
readStream.pipe(response);
})
.listen(port);
Настройка клиента
Клиентский Dockerfile
FROM node:12
WORKDIR /home/node/client
COPY package*.json ./
RUN npm install
COPY . .
CMD ["node", "capp.js"]
Функция получения клиента NB использование IP-адреса контейнера сервера дало такие же результаты
http.get('http://localhost:8080', (resp)=>{
let data = '';
resp.on('data', (chunk)=>{
data += chunk;
});
resp.end('end', ()=>{
console.log(data);
});
}).on("error", (err)=>{
console.log(err.message);
});
Docker Compose
version: "3.2"
services:
server-app:
build: ./serverClient
ports:
- 8080:8080
volumes:
- servervol:/serverdata
client-app:
build: ./clientClient
ports:
- 8081:8081
volumes:
- clientvol:/clientdata
depends_on:
- "server-app"
volumes:
servervol:
driver: local
clientvol:
driver: local
Я прочитал несколько сообщений, в которых утверждается, что проблема заключается в использовании localhost вместо IP-адреса контейнера , но я пробовал оба безуспешно. Как уже упоминалось, когда сделано в Почтальоне, он работает нормально; это заставляет меня думать, что проблема в клиентской части. Любое руководство очень ценится.
Спасибо