Для случая использования, когда вы хотите, чтобы ваши контейнерные службы могли иметь доступ к другой службе, работающей (внешне) на вашем хосте, но с пользовательским именем хоста вместо ip «localhost» (с или без--net = host):
Этого можно добиться, включив дополнительный хост в контейнер с параметром --add-host
в одном издва возможных способа (для вашего удобства):
- С IP вашего фактического хоста (используя
--net=host
)
docker run -it --net=host --add-host=wso2-api:$YOUR-HOST-IP consumer/service
С IP-адресом Docker Host (непосредственно внутри вашей
docker0 сети)
docker run -it --add-host=wso2-api:$DOCKER_HOST_IP consumer/service
В обоих случаях ваша контейнерная служба будет использовать этот пользовательский адрес ( wso2-api в моем примере) и (поскольку это имя хоста будет включено в файл /etc/hosts
контейнера), что пользовательское имя хоста будет правильно преобразовываться в фактический IP-адрес, который вам нужен.Но требование к соответствующему имени хоста (в вашем случае, потому что вам нужно соответствовать имени в сертификате) будет выполнено.
Как определить, что DOCKER_HOST_IP
?
Вручную: вы можете просто перечислить все свои текущие назначенные IP-адреса, чтобы найти тот, который соответствует docker0 сети:
ip -4 addr
или даже лучше, напрямую отфильтровав тот, который вы хотите:
ip -4 addr show docker0
Вы получите вывод, подобный следующему:
3: docker0: mtu 1500 qdisc noqueue
inet 172.17.0.1/16 brd172.17.255.255 scope global docker0
valid_lft forever предпочитаемый_lft forever
И скопируйте ip, который появляется там после inet
Автоматически: я использую этоодин скрипт для непосредственного получения текущего IP-адреса хоста докера (особенно полезно при тестировании на разных док-узлах):
DOCKER_HOST_IP="$(ip -4 addr show docker0 | awk '$1=="inet" {print $2}' | cut -d/ -f1 )"
Теперь вы можете выполнить действительно быстрое подтверждение концепции, просто запустив простоеальпийский контейнер:
docker run -it --add-host=wso2-api:$DOCKER_HOST_IP alpine
и .. попав в приглашение sh
, просто попробуйте получить доступ к запущенной службе API с помощью:
nc -zv wso2-api 8243
Наслаждайтесь!:)