Подключиться к локальному хосту между контейнерами? ⇐ Javascript
Подключиться к локальному хосту между контейнерами?
У меня есть 2 простых приложения node.js
app1/index.js
импортировать выборку из 'node-fetch'; импортировать экспресс из «экспресса» константное приложение = экспресс() константный порт = 3000 app.get('/', (req, res) => { выборка("http://localhost:3002/", { метод: 'POST', заголовки: { 'Content-Type': 'application/json' }, тело: JSON.stringify({ "msg": "hello app2" }) }) .then(соответственно => соотв.json()) .then((соответственно) => { res.json(соответственно) }) }) app.listen(port, () => { console.log(`app1 прослушивает порт ${port}`) }) app2/index.js
const express = require('express') константное приложение = экспресс() константный порт = 3002 app.use(express.json()); app.post('/', (req, res) => { res.json({ "msg": "И тебе привет" }) }) app.listen(port, () => { console.log(`app2 прослушивает порт ${port}`) }) когда я захожу на localhost:3000 в своем браузере, app1 извлекает данные из app2 и отображает их, и это отлично работает локально. Проблема возникает, когда я пытаюсь их докеризовать
Dockerfile(ы) для обоих
ОТ узла: 18-alpine РАБОЧИЙ ПАРАМЕТР/приложение КОПИРОВАТЬ. . ВЫПОЛНИТЬ npm я ЭКСПОЗИЦИЯ 3000 # EXPOSE 3002 для приложения2 CMD ["узел", "index.js"] docker-compose.yaml
услуги: приложение1: сборка: ./app1 имя_контейнера: app1_c порты: - «3000:3000» дополнительные_хосты: - "host.docker.internal:host-gateway" приложение2: сборка: ./app2 имя_контейнера: app2_c порты: - "3002:3002" дополнительные_хосты: - "host.docker.internal:host-gateway" Это не работает, и app1 не может получить доступ к локальному хосту app2: 3002
Я предполагаю, что потому, что app1 отправляет запрос на выборку на локальный хост: 30002 своего собственного контейнера вместо локального хоста приложения2, но я подумал, что "host.docker.internal:host-gateway" устраняет эту проблему и обеспечивает межконтейнерное взаимодействие?
Может кто-нибудь помочь мне понять?
Информация о системе
Ubuntu 22.04.3 LTS
Движок Docker v24.0.6
Изменить: изменены имена client -> app1 и server -> app2, чтобы избежать путаницы
У меня есть 2 простых приложения node.js
app1/index.js
импортировать выборку из 'node-fetch'; импортировать экспресс из «экспресса» константное приложение = экспресс() константный порт = 3000 app.get('/', (req, res) => { выборка("http://localhost:3002/", { метод: 'POST', заголовки: { 'Content-Type': 'application/json' }, тело: JSON.stringify({ "msg": "hello app2" }) }) .then(соответственно => соотв.json()) .then((соответственно) => { res.json(соответственно) }) }) app.listen(port, () => { console.log(`app1 прослушивает порт ${port}`) }) app2/index.js
const express = require('express') константное приложение = экспресс() константный порт = 3002 app.use(express.json()); app.post('/', (req, res) => { res.json({ "msg": "И тебе привет" }) }) app.listen(port, () => { console.log(`app2 прослушивает порт ${port}`) }) когда я захожу на localhost:3000 в своем браузере, app1 извлекает данные из app2 и отображает их, и это отлично работает локально. Проблема возникает, когда я пытаюсь их докеризовать
Dockerfile(ы) для обоих
ОТ узла: 18-alpine РАБОЧИЙ ПАРАМЕТР/приложение КОПИРОВАТЬ. . ВЫПОЛНИТЬ npm я ЭКСПОЗИЦИЯ 3000 # EXPOSE 3002 для приложения2 CMD ["узел", "index.js"] docker-compose.yaml
услуги: приложение1: сборка: ./app1 имя_контейнера: app1_c порты: - «3000:3000» дополнительные_хосты: - "host.docker.internal:host-gateway" приложение2: сборка: ./app2 имя_контейнера: app2_c порты: - "3002:3002" дополнительные_хосты: - "host.docker.internal:host-gateway" Это не работает, и app1 не может получить доступ к локальному хосту app2: 3002
Я предполагаю, что потому, что app1 отправляет запрос на выборку на локальный хост: 30002 своего собственного контейнера вместо локального хоста приложения2, но я подумал, что "host.docker.internal:host-gateway" устраняет эту проблему и обеспечивает межконтейнерное взаимодействие?
Может кто-нибудь помочь мне понять?
Информация о системе
Ubuntu 22.04.3 LTS
Движок Docker v24.0.6
Изменить: изменены имена client -> app1 и server -> app2, чтобы избежать путаницы
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение