Несмотря на то, что об этом много раз спрашивают, я этого не понимаю, и это кажется безрезультатным. Пожалуйста, примите во внимание перед публикацией возможные дубликаты.
На моем Ubuntu 16 у меня есть контейнер, который должен получать доступ к службам вне контейнера. Невозможно использовать --network = "host"
, потому что это противоречит цели использования Docker для меня. Кроме того, документация говорит: «Мостовые сети обычно используются, когда ваши приложения работают в автономных контейнерах, которым необходимо обмениваться данными», как в данном случае.
Поэтому, выбрав сетевой подход bridge
, я попробовал решение здесь (безусловно, самый популярный вопрос и ответ, найденный в Интернете). Там, где говорится, используйте команду "route" внутри контейнера, чтобы получить IP-адрес хоста:
export DOCKER_HOST_IP=$(route -n | awk '/UG[ \t]/{print $2}')
Есть две проблемы:
1: Это самое простое решение такой тривиальной задачи?
2: Я выполняю это в своем контейнере в своем приложении узла:
await execSync("route -n | awk '/UG[ \t]/{print $2}'", (err, stdout,stderr) =>{
if (err) {
console.error("Failed: " + err);
return;
}
if (stdout)
console.info(stdout);
if (stderr)
console.error(stderr);
});
Что (как и ожидалось) приводит к следующему:
/bin/sh: 1: route: not found
Я пробовал --add-host решение, но как мне узнать, какой IP-адрес использовать? Другими словами, откуда этот IP?
--add-host=testing.example.com:10.0.0.1
спасибо за комментарий, но мост реализует довольно небольшую часть сетевого стека. Следовательно, он может открывать подключения к ЛЮБОМУ месту (testing.example.com
). Я не понимаю, как из этого можно исключить только хост.
Назначение мостов - передавать контейнеры, а не контейнеры, со своим хостом. Так что я не уверен, подходит ли это вашему случаю.