Я экспериментировал с Docker сети, и я не могу найти способ, чтобы выполнить следующие действия:Сообщать Докер хозяина из Докер контейнера
Запустить простой сервер NetCat в хосте:
nc -l -p 5555
, а затем связаться с этим сервером от в пределах контейнер-докер, например
# grab the docker network interface ip
hostip=$(ip route | awk '/docker0/ { print $NF }')
# pass in the docker network interface as a host and try a curl command
docker run --add-host=docker:"${hostip}" --rm -it hiromasaono/curl curl docker:5555
Запрос на завивание просто зависает, и сервер netcat хоста не получает запрос.
Если я вместо этого начать докер с --net=host
вариант, он работает:
docker run --net=host --rm -it hiromasaono/curl curl 127.0.0.1:5555
и сервер Netcat принимает
GET/HTTP/1.1
User-Agent: curl/7.35.0
Host: 127.0.0.1:5555
Accept: */*
Как я могу общаться с простым сервером хоста NetCat внутри контейнера Докер без использования --net=host
(по умолчанию --net=bridge
)?
(FYI: Я бегу докер клиент/сервер 1.11.2)
Potentailly Соответствующие ресурсы Я Изученные в поисках ответа:
- Document how to connect to docker host from container (github issue)
- How to connect to Docker host from container (github issue)
- Allow Docker Container to Connect to a Local Postgres DB
- Docker Container Networking Documentation
Спасибо за ваш ответ. 1. Выглядит хорошо для меня: 'tcp 0 0 0.0.0.0:5555 0.0.0.0:* LISTEN' 2. Ping успешный с и без' --net = host', предполагая, что имя хоста докера установлено как описанный в моем вопросе –
Могут ли быть блокировки брандмауэра на порт 5555? Если имя хоста docker не указывает на 127.0.0.1, и вы можете выполнить ping IP-адрес, который указывает на него из контейнера докера, тогда моя догадка - это брандмауэр на хосте. –
Еще раз спасибо за ответ: у меня нет активных брандмауэров, насколько я могу судить. Можете ли вы успешно связаться с портом «LISTEN» хоста из контейнера докеров? –