как добраться до порта машины из докера - PullRequest
0 голосов
/ 28 марта 2019

У меня есть docker контейнер с запущенным node приложением. Другое приложение node, работающее на уровне компьютера с портом 7000. Моя цель - создать запрос из приложения docker в machine, используя axios.

Докер был запущен с:

docker run -p 3000:3000 -p 4000:4000 -i -t gepick_env:latest -d --network='host'

клиент во фрагменте докера:

 ....
 axios.post(                                                                                                           
    'http://localhost:7000/predict',                                                                                    
    matchesToPredict                                                                                                    
  ).then(res => {...})
...  

Я попытался test, используя curl из local.

<code>➜  gepick-devenv git:(master) ✗ curl http://localhost:7000/
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Error</title>
</head>
<body>
<pre>Cannot GET /

Попытался сделать то же самое с docker:

Сначала я зарегистрировался на docker командой:

docker exec -i -t 6c9036c76463 /bin/bash

и пробовал:

[root@6c9036c76463 /]# curl http://localhost:7000/
curl: (7) Failed to connect to ::1: Network is unreachable

`

1 Ответ

1 голос
/ 28 марта 2019

По умолчанию docker создает и использует сеть 172.17.0.0/16 для контейнеров.

В этой сети адрес 172.17.0.1 назначается хосту, на котором работает демон Docker (т. Е. Вашей машине).

Таким образом, указание на этот адрес должно работать:

 curl http://172.18.0.1:7000/

Вы можете получить адрес шлюза определенного контейнера, выполнив:

docker inspect --format "{{range .NetworkSettings.Networks}}{{ .Gateway }}{{end}}" \
   <container-name>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...