Как использовать что-то похожее на `docker.for.mac.localhost` в Ubuntu? - PullRequest
0 голосов
/ 27 июня 2019

Мне нужно использовать имя вместо моего IP или локального хоста, возможно ли получить что-то похожее на docker.for.mac?

ОБНОВЛЕНИЕ Мой пример использования: я использую WSO2Диспетчер API на локальном хосте: 8243 и 9443. Я использую образ докера, и в этом контейнере (8443) ему необходим доступ к API, развернутым в API Manager.

Когда я использую --net=host и использую "localhost" в компоненте Docker (где я должен определить URL-адрес API), я получаю ошибку

x509: certificate signed by unknown authority

Ответы [ 3 ]

1 голос
/ 27 июня 2019

Мне нужно использовать имя вместо моего IP или localhost

Если эта часть - то, что вы на самом деле ищете, вы можете легко достичь этого, добавив запись в свой/etc/hosts файл, прямо там вместе с файлом для localhost (который является "псевдонимом" вашего 127.0.01)

127.0.0.1     localhost
127.0.0.1     yourfancydomain.com
127.0.0.1     asmanyalias-asyou.wish

Затем просто перейдите в браузер и перейдите непосредственно по этому адресу,с портом, который вы уже должны были использовать в вашем док-контейнере


Объясняя немного больше о порте докера:

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

docker run --name nginx -p 8080:80 nginx

, это позволит вам использовать ваш порт 8080 для доступа к 80 порт службы, работающей внутри вашего контейнера.

Итак ... после добавления вашего локального псевдонима в ваш собственный локальный домен вы можете получить доступ к службе nginx (в приведенном выше примере) с помощьюнажатие:

your-custom-domain:8080

Если порт, который вы привязываете к службе докера, точно равен 80 (-p 80:80), то вы даже можете использовать только пользовательский домен (вообще без порта)

your-custom-domain
1 голос
/ 29 июня 2019

Для случая использования, когда вы хотите, чтобы ваши контейнерные службы могли иметь доступ к другой службе, работающей (внешне) на вашем хосте, но с пользовательским именем хоста вместо ip «localhost» (с или без--net = host):

Этого можно добиться, включив дополнительный хост в контейнер с параметром --add-host в одном издва возможных способа (для вашего удобства):

  1. С 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

Наслаждайтесь!:)

1 голос
/ 27 июня 2019

Насколько мне известно, прямого эквивалента нет.

Если вы пытаетесь получить доступ к другому порту (:PORT) на хосте, вы можете запустить второй контейнер с помощью --net=host и получить доступ кпервый сервис на localhost:PORT изнутри контейнера.

Если это не сработает, другое решение, которое я недавно прочитал, - это передать DNS | IP хоста в ваш контейнер при его запуске, а затем использовать ссылкупеременная для доступа к хосту из контейнера:

docker run ... --env=HOST=[[YOUR-HOST-ADDRESS]] ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...