Я написал несколько сценариев для управления контейнерами LXC, и я могу получить их IP-адреса через ifconfig, при условии, что я подключен к консоли.
Теперь я хочу подключиться к этим контейнерам через SSH. Как мне получить их IP-адрес таким образом, чтобы я мог написать скрипт? Я также не хочу устанавливать адреса вручную (но я сделаю это, если это единственный вариант).
До сих пор я пытался использовать lxc-start
, но машина не имеет IP-адрес, прежде чем я запустился /sbin/init
.
Ответы:
Самый простой способ сделать это сейчас:
Это возвращает IP-адрес без другого текста.
Параметр
-i
указывает, что IP-адрес должен быть возвращен, а-H
параметр отключает удобочитаемый вывод, то есть метки. Для получения дополнительной информации см. Справочную страницу lxc-info .РЕДАКТИРОВАТЬ для более новой версии LXC:
lxc info container-name
Тогда вы получите подробную информацию. Посмотрите на блок «Ips:», который должен выглядеть так, как показано ниже. Вы могли бы получить первый адрес IPv4 (
10.121.48.241
) в этом случае:источник
Видя, что запуск вещей в контейнерах не поддерживается в Ubuntu, мое следующее лучшее предложение - посмотреть на аренду IP-адресов
dnsmasq
. Это действительно просто:Там есть только две части, которые имеют какое-либо применение, поэтому мы можем отформатировать это намного лучше:
источник
lxc-ls --fancy
.dnsmasq.lxcbr0.leases
Технически говоря, вы должны иметь возможность использовать
lxc-attach
для подключения и запуска в команде (и обработки вывода), например, так:Это требует, чтобы контейнер работал.
Примечание: я не мог заставить это работать. Я установил LXC и попробовал это, но только что увидел массу ошибок пространства имен, отсутствующих файлов и прочей чепухи. Но мой единственный опыт работы с LXC - это 10 минут, которые я потратил на этот вопрос. Это может сработать. Возможно, нет. Удачи!
источник
ifconfig eth0 | grep -Eo 'addr:[0-9.]+' | cut -d: -f2
если вы просто хотите IP-адрес.No such file or directory - failed to open '/proc/28741/ns/pid'
иfailed to enter the namespace
. Я нашел ошибку, которая точно описывает проблему, но это с 2010 года.Это работает на Ubuntu 14.04:
и если вы хотите только IP-адрес (полезно для скриптов), (спасибо @JulianHLam):
источник
lxc-info -n $name -Hi
можете получить только IP без посторонних пробеловИли запрос dnsmasq (который дает IP-адреса для контейнеров)
источник
Версия Python для этого:
источник
Команда ниже заменяет
lxc-attach
пример в предыдущем постеОн работает
ifconfig
внутри контейнера и показывает результат.Похоже, что-то не настроено должным образом. В качестве обходного пути я использовал предопределенный шаблон конфигурации, предоставленный документацией LXC, чтобы он работал без дальнейшего изучения.
источник
Если вы используете LXD, эта команда может оказаться полезной для получения IP-адреса работающего контейнера.
источник
sudo lxc-ls --fancy -F ipv4 $my_container_name | tail -1
источник
Пусть dnsmasq сделает это за вас.
Сконфигурируйте экземпляр dnsmasq вашего хост-компьютера для запроса экземпляра dnsmasq lxc для домена верхнего уровня .lxc.
В / etc / default / lxc-net раскомментируйте эту строку:
Если экземпляр dnsmasq вашего хоста запущен NetworkManager (как в случае с большинством текущих установок рабочего стола Ubuntu), создайте файл /etc/NetworkManager/dnsmasq.d/lxc.conf со следующей строкой внутри:
Если dnsmasq вашего хоста запускается не NetworkManager, добавьте эту строку в /etc/dnsmasq.d-available/lxc вместо этого:
Затем перезапустите все, чтобы они приняли изменения:
Возможно, вам придется перезапустить ваши контейнеры lxc или заставить их запрашивать новые аренды DHCP, прежде чем они появятся в DNS. (Я не помню, было ли это необходимо, когда я это сделал.) Стоит также упомянуть, что я видел сообщение об ошибке о том, что lxc-net не воспринимает изменения dnsmasq при перезапуске, поэтому вы можете просто перезагрузить хост-систему чтобы быть уверенным.
Тогда попробуйте это:
источник
Простой ответ
Если вы не помните имя контейнера, просто введите sudo lxc-ls -f.
источник