Machine: [Запрос на функцию] Укажите статический IP-адрес для виртуальных машин VirtualBox

Созданный на 16 авг. 2015  ·  212Комментарии  ·  Источник: docker/machine

Привет, я просматривал документы и проблемы, чтобы понять это, но не могу найти ответа.

По сути, я хочу иметь возможность указывать IP-адрес виртуальной машины (т.е. значение, указанное в поле «URL» в docker-machine ls ), когда я создаю ее с помощью docker-machine create .

Я хочу этого, потому что я полагался на адрес boot2docker по умолчанию 192.168.59.103, но теперь он меняется от машины к машине.

Спасибо!

drivevirtualbox kinenhancement

Самый полезный комментарий

Ребята, пошли. Не могли бы мы остановить +1 по явно давней проблеме? Именно по этой причине была реализована кнопка «Нравится». Не нужно спамить подписчиков.

Все 212 Комментарий

+1, нужна эта функция

+1

+1

+1

Вот хорошее решение. Добавьте в свой ~/.bash_profile :

eval `docker-machine env <docker-machine name>`
export <some variable>=$(docker-machine ip <docker-machine name>)

@letsgolesco вы можете использовать для этого параметр --virtualbox-hostonly-cidr , который выберет правильный адаптер vboxnetX только для хоста.

По умолчанию кажется, что докер-машина выбирает один случайным образом, поэтому принудительное использование одного для vboxnet0 ( 192.168.59.3/24 , тот, который используется boot2docker), похоже, решает проблему:

$ docker-machine create --driver virtualbox --virtualbox-hostonly-cidr "192.168.59.3/24" dev
Creating VirtualBox VM...
Creating SSH key...
Starting VirtualBox VM...
Starting VM...
To see how to connect Docker to this machine, run: docker-machine env dev

$ docker-machine ip dev
192.168.59.103

Ваше здоровье.

@luislavena - К сожалению, это не сработало.

+1

Хотя, конечно, нужна эта функция!

@krinkere не уверен в вашем env, но это сработало для моей установки OSX, но не удалось при использовании машины в Linux, что потребовало настройки конфигурации dhcpserver vboxnet0 :

$ VBoxManage dhcpserver modify --ifname vboxnet0 --disable

$ VBoxManage dhcpserver modify --ifname vboxnet0 --ip 192.168.59.3 --netmask 255.255.255.0 --lowerip 192.168.59.103 --upperip 192.168.59.203

$ VBoxManage dhcpserver modify --ifname vboxnet0 --enable

$ docker-machine create --driver "virtualbox" --virtualbox-cpu-count "-1" --virtualbox-disk-size "30000" --virtualbox-memory "2560" --virtualbox-hostonly-cidr "192.168.59.3/24" dev

Как видите, это огромный хакер: smile_cat:, но пока работает: smile:

Хотел бы увидеть эту особенность !!

@luislavena - Спасибо за ответ

Вот что я получаю на своем Mac.

$ docker-machine create --driver virtualbox --virtualbox-hostonly-cidr "192.168.99.3/24" dev
Создание виртуальной машины VirtualBox ...
Создание ключа SSH ...
Запуск VirtualBox VM ...
Запуск ВМ ...
Чтобы узнать, как подключить Docker к этому компьютеру, запустите: docker-machine env dev

$ docker-machine ip dev
192.168.99.100

Хотя у меня есть ip в правильной подсети, это не тот IP, который я хотел бы использовать ... Def хотел бы увидеть эту функцию

+1 полезная функция

+1 Эта функция нам очень поможет!

Мы используем docker-machine для запуска локального кластера Elasticsearch, и у нас есть запись /etc/hosts для 192.168.59.103 которая сопоставляется с elastic-local.mycompany.com . Поскольку мы перешли на docker-machine из boot2docker, нам приходилось постоянно вручную обновлять эту запись файла hosts на новый IP-адрес, назначенный нашей виртуальной машине docker. Мы могли бы написать некоторую автоматизацию, которая обновила бы эту запись файла hosts за нас, но было бы намного проще, если бы докер-машина просто позволяла нам использовать настраиваемый IP-адрес для новых машин.

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1 (и)

+1

+1

+1

Временно я использую некоторые сценарии bash для обновления файлов hosts, но это неуклюже, так как вам нужно обновить / etc / hosts с помощью сценария sudo'd, но поскольку вы можете получить ip с докер-машины, он работает. Могу поделиться сутью.

ianlintner-wf, поделитесь скриптом, пожалуйста. Я сам собираюсь написать такое, но если я не смогу изобрести велосипед, это будет здорово ... да ...

Вот основной сценарий, который я использую. Я немного почистил его, но в нем отсутствуют более формальные параметры по умолчанию и другие вещи.

https://gist.github.com/ianlintner-wf/a2b917158aaf100d9fb3

+1 пожалуйста!

спасибо за скрипт @ ianlintner-wf. Я написал тот, который динамически добавляет host / ip любых запущенных докер-машин. Протестировали на OS X El Capitan.

https://gist.github.com/cookandy/f14fadd31721dc6e136e

Приращение IP-адреса кэшируется DHCP-сервером VirtualBox. Остановить и перезапустить VirtualBox сбросит приращение IP.

+1, наши разработчики OSX все еще используют boot2docker, потому что наш env полагается на статические записи / etc / hosts. (кстати спасибо за скрипт @ ianlintner-wf)

+1

+1

+1

+1

+2

Мое решение для взлома, которое определенно не для всех: я запускаю Cassandra на докере и хочу получить к нему доступ из разрабатываемого мной приложения node.js. Вместо того, чтобы использовать фиксированный IP-адрес для док-машины, я делаю:

docker-machine stop dockervm
VBoxManage modifyvm "dockervm" --natpf1 "tcp-port9160,tcp,,9160,,9160"
VBoxManage modifyvm "dockervm" --natpf1 "tcp-port9042,tcp,,9042,,9042"
docker-machine start dockervm
eval "$(docker-machine env dockervm)"

который включает переадресацию портов для туннелирования портов с локального хоста на виртуальную машину докера. Теперь я могу просто подключиться к localhost: 9042. (Это было бы намного проще, если бы кто-то исправил https://github.com/docker/machine/issues/41 .: D)

@luislavena, спасибо, только что воссоздал машину по умолчанию с этими параметрами, и теперь все работает нормально

+1

+1, я попробую скрипт с автоматическим обновлением файла hosts, но обязательно хочу эту функцию!

Я создал свой на основе сценария @cookandy & @ ianlintner-wf.

Вы можете настроить его с помощью карты между именем docker-machine-name и именем хоста.

Он обновит ваши хосты, удалив старые IP-адреса докеров и новые.

https://gist.github.com/juliengarcia/9a208ca5cf6590b25150

+1

: +1:

+1

+1

: +1:

+1

+1

+1

Докер скажет мне, чтобы я регенерировал сертификаты, если IP изменится, мне нужно установить статический IP, чтобы избежать этой проблемы, или есть другое решение?

eval "$(docker-machine env machine-1)"

Error running connection boilerplate: Error checking and/or regenerating the certs: There was an error validating certificates for host "192.168.99.101:2376": x509: certificate is valid for 192.168.99.108, not 192.168.99.101
You can attempt to regenerate them using 'docker-machine regenerate-certs name'.
Be advised that this will trigger a Docker daemon restart which will stop running containers.

+1 какое-либо время прибытия на эту функцию?

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

192.168.98.100

docker-machine create -d virtualbox --virtualbox-hostonly-cidr "192.168.98.1/24" m98

192.168.97.100

docker-machine create -d virtualbox --virtualbox-hostonly-cidr "192.168.97.1/24" m97

192.168.96.100

docker-machine create -d virtualbox --virtualbox-hostonly-cidr "192.168.96.1/24" m96

Если нет другой машины с таким же cidr , машина всегда должна получать .100 IP при запуске.

@ schmunk42 очень хорошая работа: +1:

Мой виртуальный бокс имеет диапазон DHCP 192.168.99.100 - 255, и я хочу установить IP до 100.

Я нашел простой трюк для установки статического IP-адреса: после создания машины я запускаю эту команду и перезагружаю машину:

echo "ifconfig eth1 192.168.99.50 netmask 255.255.255.0 broadcast 192.168.99.255 up" | docker-machine ssh prova-discovery sudo tee /var/lib/boot2docker/bootsync.sh > /dev/null

Эта команда создает файл bootsync.sh, который просматривается сценариями запуска boot2docker и выполняется.

Теперь при загрузке машины выполняется команда и устанавливается статический IP.

docker-machine ls
NAME              ACTIVE   DRIVER       STATE     URL                                      SWARM
test-1                      -        virtualbox     Running   tcp://192.168.99.50:2376      test-1 (master)

Это тоже хороший трюк @micheletedeschi : +1:

Мне нравится, как это исправил @micheletedeschi . Вроде простой и стандартный способ, не требующий доработки докер-машины. Может, это надо где-то задокументировать?

Вы можете найти документацию здесь или здесь

+1
Я работаю с 3 виртуальными машинами, и у меня всегда возникают проблемы с подключением через ssh и настройкой моих утилит, файла хостов и т. Д.

+1

: +1:

+1

+1

+1

+1

+1 Я пытаюсь автоматизировать создание машины и не могу рассчитывать, что у меня будут разрешения на добавление записей в /etc/hosts снова и снова. Наличие стабильного IP-адреса означало бы, что его нужно настроить только один раз.

Я закончил настройкой скрипта, который предварительно заполняет dnsmasq на хосте, используя ip докер-машины

19 декабря 2015 года в 12:18 Педро Каттори [email protected] написал:

+1

-
Ответьте на это письмо напрямую или просмотрите его на GitHub.

Очень полезная функция: +1:

Люблю исправление @micheletedeschi , хотя я закончил размещение IP- eth1 на eth1:1 в приведенной выше команде), поскольку интерфейс eth1 работает с DHCP и в конечном итоге вернется к IP-адрес, назначенный DHCP.

Не уверен, сколько времени длится обновление аренды dhcp (работал в течение дня с начальным исправлением, прежде чем я внезапно получил ошибку «вам нужно регенерировать сертификаты TLS» и понял, что происходит). Сообщит, если IP-адрес виртуального интерфейса не закреплен

@drags Я обновил команды:

echo "kill `more /var/run/udhcpc.eth1.pid`\nifconfig eth1 192.168.99.50 netmask 255.255.255.0 broadcast 192.168.99.255 up" | docker-machine ssh prova-discovery sudo tee /var/lib/boot2docker/bootsync.sh > /dev/null

затем запустите команду (только в первый раз)

docker-machine regenerate-certs prova-discovery

теперь IP не будет изменен DHCP

: +1:

+1

: +1:

+1

+1

+1

Кому -нибудь повезло @micheletedeschi ? Мне нужна одна команда, которую может запустить каждый в команде, чтобы запустить dev vm. Я пробовал следующее:

docker-machine create -d virtualbox dev
echo "ifconfig eth1 192.168.99.50 netmask 255.255.255.0 broadcast 192.168.99.255 up" | docker-machine ssh dev sudo tee /var/lib/boot2docker/bootsync.sh > /dev/null
sleep 30
docker-machine restart dev
sleep 30
docker-machine regenerate-certs -f dev

Когда я запускаю команды вручную, все работает. В скрипте надо было засыпать 30 или просто зависала команда перезапуска. Теперь сценарий успешно завершается, но после его запуска виртуальная машина все еще работает со старым IP-адресом.

Вы можете использовать vagrant для запуска док-машины, а затем использовать плагин, например vagrant-hostmanager. Но, конечно, у вас есть и другие проблемы, с которыми нужно иметь дело, если вы хотите, чтобы кроссплатформенная виртуальная машина запускалась с помощью одной команды.

В настоящее время идеального решения просто нет (ага).

Да, думаю, я пока останусь с Vagrant.

Я создаю образ Vagrant box с докером, работающим с DOCKER_OPTS="-H 0.0.0.0:2375" . Затем я могу создать vagrant vm с жестко запрограммированным IP-адресом частной сети и использовать этот IP-адрес для установки DOCKER_HOST и / etc / hosts, что, на мой взгляд, будет довольно идеальной настройкой.

+1, особенно работа с машинным драйвером vmwarevsphere

+1

+1

+1

+1, просто возможность установить IP-адрес машины. В настоящее время CLI поддерживает только его получение. Это потребует использования IP-адресов AWS Elastic. В противном случае необходимо вручную обновить config.json машины.

~/.docker/machine/machines/my-machine-with-aws-elastic-ip/config.json

@dcosson wrt скриптинг.

Я просто запускаю докер-машину, затем запускаю следующие 2 команды (одна для уничтожения клиента DHCP, две для установки статического IP-адреса). Я решил не запускать docker restart для запуска bootync.sh. Возможно, этот сценарий запуска не работает? Также возможно, что DHCP-клиент испортил вас и сбросил вам IP-адрес eth1.

echo "kill `more /var/run/udhcpc.eth1.pid`\nifconfig eth1 192.168.1.11 netmask 255.255.255.0 broadcast 192.168.99.255 up" | docker-machine ssh <machine-name> sudo tee /var/lib/boot2docker/bootsync.sh > /dev/null
docker-machine ssh <machine-name> "sudo ifconfig eth1 192.168.1.11 netmask 255.255.255.0 broadcast 192.168.1.255 up"

+1

+1

Мне пришлось немного изменить фрагмент @roocell , чтобы немедленно убить DHCP-сервер, потому что я не хотел перезагружаться. В противном случае он вернется через несколько минут.

echo "kill `more /var/run/udhcpc.eth1.pid`\nifconfig eth1 192.168.1.11 netmask 255.255.255.0 broadcast 192.168.99.255 up" | docker-machine ssh <machine-name> sudo tee /var/lib/boot2docker/bootsync.sh > /dev/null

docker-machine ssh <machine-name> "sudo cat /var/run/udhcpc.eth1.pid | xargs sudo kill"

docker-machine ssh <machine-name> "sudo ifconfig eth1 192.168.1.11 netmask 255.255.255.0 broadcast 192.168.1.255 up"

У меня такое чувство, что отсутствие статического IP-адреса на моем компьютере, на котором запущен consul, - это то, что вызывает у меня проблемы с моим кластером роя. +1 за это

+1

+1

+1

+1

+1

+ 1_000000 :)

+1

Основываясь на комментарии @micheletedeschi , вот мой сценарий для установки фиксированного IP-адреса для виртуальной машины докер-машины:
http://stackoverflow.com/a/35367277/6309

+1

+1

+1

+1

Что я сделал, так это создал копию вашего файла hosts где угодно.

Установите заполнитель для частей, которые вы хотите динамически изменять

<docker-machine-ip> doctify.local.com
<docker-machine-ip> doctify.local.co.uk
<docker-machine-ip> www.doctify.local.com
<docker-machine-ip> www.doctify.local.co.uk

К вашему сведению: я использую gnu-sed в качестве sed по умолчанию, поэтому он не будет тем, что на вашем Mac
brew install gnu-sed --with-default-names

и в моем стартовом скрипте я просто заменил их, а затем отключил файл hosts. Теперь, если у вас есть такая же копия файла hosts, как и раньше. это не должно влиять на другие ваши услуги

#!/bin/bash

echo
echo "########################################################"
echo "####              Update Docker Dev Hosts           ####"
echo "########################################################"
echo

machine_name="doctify-dev"

update_hosts() {
    echo
    # Copy over default hosts file
    echo "Copy Default Hosts..."
    cp -fv nginx/hosts docker/hosts

    echo
    # Replace with actual ip address
    echo "Replace hosts file..."
    echo "$machine_name IP ($machine_ip)"
    sed -i -e "s|<docker-machine-ip>|$machine_ip|g" docker/hosts

    echo
    # Move to /etc/hosts
    echo "Move hosts to correct location..."
    sudo mv -fv docker/hosts /etc/hosts

    echo
    # Remove copied hosts file
    echo "Clean up hosts file if it still remains..."
    rm -rfv docker/hosts
}

echo
# Get Current IP
echo "Retrieving Current IP Address..."
ip=($(cat /etc/hosts | grep doctify.local.com | sed -n '1p'))
echo "Current IP: $ip"

echo
# Get IP address of docker machine
echo "Get Current Machine IP address..."
machine_ip=$(docker-machine ip $machine_name)
echo "Machine IP: $machine_ip"

echo
if [ "$ip" = "$machine_ip" ]; then
    echo "IP Addresses are matching. Exiting..."
else
    echo "IP Addresses differ. Updating..."
    update_hosts
fi

Запуск сценария:

#!/bin/bash

echo
echo "########################################################"
echo "####            Start Docker Dev Environment        ####"
echo "########################################################"
echo

$machine_name=doctify-dev

echo
echo "Start Machine..."
docker-machine start $machine_name

echo
echo "Attach Machine to Terminal..."
eval $(docker-machine env --shell bash $machine_name)

echo
echo "Update hosts IP..."
source docker/update-hosts

echo
echo "Set Machine IP as Hostname..."
export DOCKER_HOST_IP=$(docker-machine ip $machine_name)

echo
echo "Clean Docker Images..."
source docker/clean

echo
echo "Build Docker Images..."
docker-compose build

echo
echo "Start Docker Images..."
sh docker/bin/osx-dev -r "docker-compose up" -i ".rsyncignore"

+1

+1

+1

+1

+1

+1

+1

+1

Вот что я использую для создания своей среды докер-машины с согласованными IP-адресами:

#--- Usage: d-machine-static new_dm_name new_dm_ip [new_dm_memory]
function d-machine-static {
    new_dm_name="${1}"
    new_dm_ip="${2:-192.168.90.100}"
    new_dm_memory="${3:-1024}"
    docker-machine create -d virtualbox --virtualbox-hostonly-cidr "${new_dm_ip}/24" --virtualbox-memory "${new_dm_memory}" "${new_dm_name}"
    echo -e "\033[1;34m${new_dm_name}\033[0m = \033[0;32m$(/usr/local/bin/docker-machine ip ${new_dm_name})\033[0m"
}

Некоторые IP-адреса имеют тенденцию к успеху чаще, чем другие, и мне больше всего повезло с IP-адресами вида 192.168.x.100, так что x <99 .

А вот что я использую для быстрого переключения между ними:

#--- Switch to a different docker-machine environment.
function d-env () {
    target_environment="${1}"
    if [[ $(/usr/local/bin/docker-machine status ${target_environment}) = "Stopped" ]]; then
        docker-machine start "${target_environment}"
        sleep 1
    fi
    eval "$(/usr/local/bin/docker-machine env ${target_environment})"
    echo -e "\033[1;34m${target_environment}\033[0m = \033[0;32m$(/usr/local/bin/docker-machine ip ${target_environment})\033[0m"
}

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

+1

Еще пришлось добавить шлюз по умолчанию ...

Вот как я это делаю в Windows 10 с помощью PowerShell и Hyper-V (со службой VMNat.dll для NAT вместо ICS).

  • подсеть 192.168.233.0/24
  • DHCP-сервер работает на .1
  • DNS и NAT на .2
  • новая докер-машина для получения статического IP-адреса .10

Оболочка PowerShell
docker-machine create --driver hyperv --hyperv-virtual-switch "VMWare NAT" --hyperv-memory "512" consul0

еще предстоит проверить, работает ли шлюз по умолчанию после перезагрузки ....

echo "kill` more /var/runudhcpc.eth0.id```nifconfig eth0 192.168.233.10 netmask 255.255.255.0 broadcast 192.168.233.255 up "| докер-машина ssh consul0 "sudo tee /var/lib/boot2docker/bootsync.sh"> $ null

сразу убить dhcp на интерфейсе eth0

докер-машина ssh consul0 "sudo cat /var/run/udhcpc.eth0.pid | xargs sudo kill"

запустите eth0 с новым статическим IP.

следующая команда зависает ... Мне нужно CTRL + C через некоторое время ...

docker-machine ssh consul0 "sudo ifconfig eth0 192.168.233.10 netmask 255.255.255.0 broadcast 192.168.233.255 up"

исправьте сертификаты tls, которые предназначены для старого динамического IP-адреса

докер-машина восстановить сертификаты consul0

убедитесь, что Интернет все еще работает, повторно добавив шлюз по умолчанию (в моем случае он пропал)

docker-machine ssh consul0 "добавить маршрут по умолчанию gw 192.168.233.2"
`` `` `

хорошо знать:

#get the ip
$(Get-VM consul0).NetworkAdapters[0].IPAddresses[0]

#open vmconnect
$vm=Get-VM consul0

vmconnect $env:COMPUTERNAME $vm.Name -G $vm.Id

Примечание. Иногда кажется, что инициализация boot2docker завершается ошибкой, и Hyper-V не может получить IP-адрес адаптера ...

+1

+1

Мы все еще в режиме плюс один? :)

Он постоянно портит мои настройки, и было бы вполне разумно давать фиксированные IP-адреса, особенно когда вы запускаете несколько сред разработки для разных проектов локально.

Мы ожидаем подтверждения того, что вышеуказанная стратегия работает для других, использующих docker-machine в Mac OSX. Вот это в более сжатой форме:

1) Задайте для переменной x любое целое число от 1 до 98. Например:
x='42'

2) Задайте для переменной new_dm_name имя вашей новой среды докер-машины. Например:
new_dm_name='magic'

3) Выполните эту команду:
docker-machine create -d virtualbox --virtualbox-hostonly-cidr "192.168.$x.100/24" "$new_dm_name"

Ваш новый статический IP-адрес теперь должен быть 192.168.x.100 и должен сохраняться между сеансами, пока вы не назначаете этот IP-адрес чему-либо еще. Чтобы убедиться, что это так, я рекомендую выполнить следующие команды:

docker-machine ip "$new_dm_name"
docker-machine stop "$new_dm_name"
docker-machine start "$new_dm_name"
docker-machine ip "$new_dm_name"

Если повезет, это можно будет адаптировать и к Windows.

+1

ну я обречен. Моя компания использует 192.168.99.x для нашего собственного локального IP-адреса, поэтому разрешите это изменить.

@xbeta - можно просто перенастроить сеть VBox? Я не смогу рассказать вам, как это сделать, поскольку я использую Hyper-V, но если вы используете драйвер VBox по умолчанию, просто посмотрите на виртуальные сетевые адаптеры, созданные им, docker-machine будет просто обертывание VBox

+1

Не могли бы люди, пожалуйста, прекратите с комментариев +1? Github теперь имеет функцию +1. Просто щелкните значок + смайлик в правом верхнем углу и щелкните значок с изображением большого пальца вверх. Он выражает вашу поддержку, не отправляя электронное письмо всем, кто здесь комментирует. #kthxbye

https://blog.docker.com/2016/03/docker-for-mac-windows-beta/

Быстрее и надежнее: больше никаких VirtualBox!

Похоже, Docker отказывается от VirtualBox. Возможно, вы захотите изменить свои ожидания по этой проблеме, когда-либо получив решение.

+1

+1

+1

: +1:

+1

+1

+1

Да, пожалуйста, будьте ботаниками, продолжайте сочувствовать. Это вселяет столько уверенности.

@ everett-toews VirtualBox по-прежнему полезен для решений докеров с несколькими хостами, таких как Swarm, Kubernetes, Nomad и т. д. Docker для Mac эквивалентен настройке с одним хостом (ваш Mac является хостом).
Другое локальное решение - VmwareFusion, которое сохраняет IP-адрес хоста при его перезапуске. Кстати, это недавнее исправление.
Итак, да, нам нужен более простой способ указать статический IP-адрес для VirtualBox.

@gittycat Ага. Вот почему я до сих пор использую Docker Toolbox. Просто чтобы я мог создать Рой. Тем не менее, я бы предпочел увидеть этот запрос функции: несколько виртуальных машин в Docker для Mac / Windows.

+1

+1

+1

+1

+1

Если вам нужно настроить статический IP-адрес для машины boot2docker, просто отредактируйте / var / lib / boot2docker / profile и добавьте

sudo cat /var/run/udhcpc.eth1.pid | xargs sudo kill 
sudo ifconfig eth1 <ip address to assign> netmask <subnet mask> broadcast <broadcast address> up

После этого вам нужно регенерировать сертификаты
docker-machine regenerate-certs rancher -f

+1

Думаю, пора, по крайней мере, для Mac и Windows закрыть этот запрос как нерелевантный. Все мои проблемы с ip докер-машины были решены докером для Mac. Мысли все?

@caledhwa согласен, docker mac довольно стабилен, теперь не вижу причин иметь дело с докер-машиной

@caledhwa Docker для Mac поддерживает только один компьютер - если вы настроили несколько компьютеров, это все еще актуально.

@caledhwa, как сказал @davidolrik , Docker для Mac / Windows / AWS / Azure поддерживает только 1 хост, что исключает его для разработки, демонстраций и тестирования многоузловых Swarm / Kubernete / Mesos и т. д.

👍

+1

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

Чтобы иметь возможность исправить IP-адрес докер-машины для виртуального бокса, необходима функция.

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

x509: certificate is valid for 192.168.99.103, not 192.168.99.100

Да, я мог бы использовать docker-machine regenerate-certs для устранения проблемы с сертификатом, однако IP-адрес хранилища значений ключей также изменился, и в результате мой рой перестал работать, пока я вручную не изменю их в конфигурации один за другим. еще раз.

Возможно, будет лучше просто удалить их и создать этот хост заново. Однако все изображения / контейнеры на этих хостах будут потеряны.

Итак, дайте возможность указать IP-адрес хоста или просто автоматически выделить фиксированный IP-адрес для хоста докеров виртуального бокса и не позволять ему изменяться при перезагрузке.

+1
У меня есть случай, когда я использую dnsmaq для DHCP и DNS, основываясь на приведенных выше комментариях, я попытался отключить DHCP-сервер интерфейса виртуального ящика, в моем случае это vboxnet4 например VBoxManage dhcpserver remove --netname HostInterfaceNetworking-vboxnet4 и мне нужно перезагрузить машина для выбора диапазона DHCP из dnsmasq , проблема, с которой я сталкиваюсь, заключается в том, что при каждом создании новой машины докер-машина включает сервер DHCP на vboxnet4 а другие серверы, использующие dnsmasq, не могут найдите докер-машины, мне нужно повторить удаление vnet, а затем перезагрузить докер-машины. было бы здорово, если бы мы могли добавить флаг в docker-machine-create, чтобы не разрешать такие вещи, как dhcp.

+1

+1

+1

+1

Вот команда, которая инкапсулирует работу @micheletedeschi и обеспечивает некоторое удобство для переключения между DHCP и статической конфигурацией. Он также обновляет ваш файл /etc/hosts если требуется.

https://github.com/fivestars/docker-machine-ipconfig

Последние несколько недель мы пользуемся им с большим успехом. Просто запустите его сразу после создания док-машины.

Usage: docker-machine-ipconfig <command> args...

Commands:
    ls                             List running docker-machines' ip addresses

    static <machine> [ip-address]  Configure <machine> to use a static IP address
                                   (default is current address)

    dhcp <machine>                 Configure <machine> to use DHCP client to gather IP address

    hosts                          Update /etc/hosts file

Все думали о более «общем» решении (встроенная функция докер-машины), поскольку этот вариант интересен также для Vsphere, Azure и других сред развертывания. Но это действительно приветствуется.

+1

+1

+1

+1

+1

+1

Обходной путь

+1, сегодня столкнулся с той же проблемой при использовании ZooKeeper и VirtualBox

Обходной путь

Вы убиваете DHCP-клиента? После восстановления вы можете подтвердить, что DHCP-клиент по-прежнему не работает?

Я нашел другой обходной путь, который наконец-то сработал для меня: я просто запускаю агент роя на каждой машине, используя _advertise = $ (ifconfig eth1 | grep -Eo "192.168.99.1 [0-9] {2}"): 2376_ и публикую текущий IP в ZooKeeper (или любой другой сервис обнаружения). В моем случае это нормально, поскольку я могу рассчитывать на то, что каждой машине будет назначен адрес 192.168.99.1 ** (это всего лишь экспериментальная установка). думаю, есть более сложные выражения регулярных выражений, которые можно применять к произвольным диапазонам IP-адресов. Это неприятно и может показаться хакерским, но работает.

+1

+1

Произвольное изменение IP-адресов виртуальных машин и сертификатов TLS, которые внезапно становятся недействительными после перезагрузки, вызывало множество ошибок и потрачено впустую человеко-часы

Это вообще приоритет? Целых 13 месяцев это дело было открыто. +10000

Я предполагаю, что есть философские разногласия между некоторыми людьми из команды docker machine и остальным миром по этому поводу. Использование DHCP и недетерминированный IP-адрес практически бесполезны для всех моих случаев использования.

Я использовал этот обходной путь в течение прошлого года. Он адаптирован из некоторых однострочных обходных путей, описанных выше.

SSH на докер-машину
докер-машина ssh по умолчанию

Добавить / отредактировать скрипт запуска boot2docker
sudo vi /var/lib/boot2docker/bootsync.sh

#!/bin/sh
/etc/init.d/services/dhcp stop
ifconfig eth1 192.168.99.50 netmask 255.255.255.0 broadcast 192.168.99.255 up

sudo chmod 755 /var/lib/boot2docker/bootsync.sh
выход

Перезагрузите машину и восстановите сертификаты
перезапуск докер-машины по умолчанию
докер-машина регенерировать сертификаты по умолчанию

+1

+1

+1 (для docker-machine и jimmidyson / minishift)

+1

@eytanhanig К сожалению, ваш метод у меня не сработал. Я использую OS X 10.11.6. Машины получают желаемые IP-адреса, но при подключении к ним возникает ошибка. Докер предлагает регенерировать ключи, но это не устранило проблему.

+1

+1

Смешно, как долго люди добавляли +1.

+1

Мне нравится наличие этой функции, однако я не нашел элегантного подхода к ее реализации.

Проблема вызвана DHCP в Virtualbox, при перезагрузке системы DHCP-сервер потеряет все данные выделенных IP-адресов и попытается перераспределить IP-адрес для тех виртуальных машин, которые вряд ли будут иметь тот же IP-адрес в последний раз.

Я не уверен, что правильно разрешать Virtualbox сохранять данные DHCP. И Boot2docker не будет сохранять IP-адрес, выделенный DHCP, что на самом деле является правильным поведением.

IMHO, я не думаю, что попытаться обойти DHCP - это правильный способ, я думаю, что добавление возможности указывать статический IP-адрес для Boot2docker и драйвера виртуального бокса докер-машины должно решить проблему.

Возможно, лучше сначала реализовать статический IP-адрес в проекте https://github.com/boot2docker/boot2docker , например, добавить возможность указывать статический IP-адрес, а не использовать DHCP.

Вот код для запуска DHCP-вызова:

https://github.com/boot2docker/boot2docker/blob/master/rootfs/rootfs/bootscript.sh#L16

# Trigger the DHCP request sooner (the x64 bit userspace appears to be a second slower)
echo "$(date) dhcp -------------------------------"
/etc/rc.d/dhcp.sh
echo "$(date) dhcp -------------------------------"

Мы можем сделать это условным, добавив набор конфигурации IP в /var/lib/boot2docker/profile , и если статический IP был настроен, тогда использовать статический IP вместо запроса IP от DHCP.

Затем мы можем добавить один или несколько параметров для драйвера virtualbox чтобы указать статическую IP-конфигурацию, например --virtualbox-boot2docker-cidr , --virtualbox-boot2docker-gateway , --virtualbox-boot2docker-dns ...

+1

+1

+1

Ребята, пошли. Не могли бы мы остановить +1 по явно давней проблеме? Именно по этой причине была реализована кнопка «Нравится». Не нужно спамить подписчиков.

Не нужно спамить подписчиков.

Вы можете отказаться от подписки.
1

Я за то, чтобы спамить подписчикам.

Некоторые из этих подписчиков являются частью команды проекта.

26 января 2017 г., 14:20, "Сергей Невмержицкий" [email protected]
написал:

Не нужно спамить подписчиков.

Вы можете отказаться от подписки.
[изображение: 1]
https://cloud.githubusercontent.com/assets/1006042/22332699/4cf1a8b4-e3e3-11e6-8bad-52406c3b8055.png

-
Вы получили это, потому что прокомментировали.
Ответьте на это письмо напрямую, просмотрите его на GitHub
https://github.com/docker/machine/issues/1709#issuecomment-275386350 ,
или отключить поток
https://github.com/notifications/unsubscribe-auth/AG44NZ2KdnsH6JTU6iI_5Uieh9WZxWXBks5rWJ2RgaJpZM4FsQYg
.

Я за то, чтобы спамить подписчикам.
Некоторые из этих подписчиков являются частью команды проекта.

Сопровождающий регистрируется. Пожалуйста, _не_ не спамьте проблему с помощью комментариев +1. Это хорошо известная проблема, и рассылка спама в ветке не приносит никакой пользы. Если хотите, укажите поддержку с помощью смайликов «+1». Как всегда, мы будем рады оценить запросы на вытягивание или подробные предложения. Спасибо всем.

(В качестве примечания, @ twang2218, похоже, в целом имеет правильную идею - статические IP-адреса сложнее, чем они кажутся правильными, и подходят к вариантам использования, которые подписчики этого потока могут иметь в виду - возможно, проблема может быть запущена в boot2docker репозиторий для обсуждения.)

Мне не очень нужен статический айпи. Но как только IP-адрес выбран во время создания, он должен сохранять его при последующих перезапусках. Это уже доступно?

У меня был докер с VPN, и стандартный 192.168.99.100 не загружался. Я решил, что это из-за VPN-соединения, поэтому я установил мостовую сеть внутри Virtualbox для доступа к докеру через 192.168.1.159. Я хотел бы, чтобы это отображалось на опубликованном IP-адресе Kitematic. Есть ли способ сделать это?

Для тех, кто не может дождаться, когда эта функция будет реализована, назначение пользовательского IP-адреса, а также пользовательского процессора / памяти возможно с помощью поставщика Vagrant VirtualBox и универсального драйвера докер-машины .

Например, в окнах поместите этот Vagrantfile:

Vagrant.configure("2") do |config|
  config.vm.box = "AlbanMontaigu/boot2docker"
  config.vm.provider "virtualbox" do |v|
    v.memory = 8192
    v.cpus = 8
  end
  config.vm.synced_folder ".", "/vagrant", disabled: true
  config.vm.synced_folder "C:/Users", "/c/Users"
  config.vm.network "private_network", ip: "192.168.99.103"
end

и поместите бродячий закрытый ключ ssh по умолчанию с именем vagrant.pem

и беги

vagrant up
docker-machine create --driver generic --generic-ip-address=192.168.99.103 --generic-ssh-user=docker --generic-ssh-key=vagrant.pem default
docker-machine ls

и вы получите хост-докер с настраиваемым IP-адресом, процессором, памятью и т. д., настроенными через бродягу, в то же время доступным через докер-машину.

Вы можете найти рабочий набор файлов для Windows по адресу https://github.com/joelhandwell/dockerhost

@jcwilson Привет, Джош и другие, большое спасибо .. Я раздвоил ваш скрипт, чтобы исправить ту же проблему (см. https://github.com/minishift/minishift/issues/343, https://github.com/minishift / minishift / issues / 598) в сочетании с minishift:

https://github.com/ahilbig/docker-machine-ipconfig

Какие-нибудь Новости?

В настоящее время я экспериментирую с этим для Minishift: https://github.com/minishift/minishift/issues/1293
Хотя другим подходом было бы использовать что-то вроде cloud-init (что, возможно, слишком тяжело для этого подхода, или встроить DHCP-сервер в двоичный файл на основе Go и использовать это для принудительного выделения выделенного IP-адреса)

+1.
В настоящее время иметь более одной машины - ужасная боль. Если вы используете дополнительные сертификаты (например, для кастомного репозитория докеров) и меняете порядок запуска машин, вам необходимо сделать:

Error checking TLS connection: Error checking and/or regenerating the certs: There was an error validating certificates for host "192.168.99.100:2376"
: x509: certificate is valid for 192.168.99.101, not 192.168.99.100

Это заставляет вас повторно создавать сертификаты или отключать все машины и восстанавливать порядок выполнения (что иногда также может быть болезненным).

Кроме того, использование Chef для настройки проекта на основе Docker также было бы намного лучше, если бы вы могли предположить, что созданный компьютер всегда будет иметь один и тот же IP-адрес (например, добавив его в файл hosts, и вы могли бы забыть об IP-адресах).

+1

+1

+1
спасибо jcwilson, скрипт docker-machine-ipconfig очень хорош! Мне нужно было изменить eth1 на eth0 в скрипте, после этого скрипт работал идеально для меня. Я использую vmware vsphere.

до свидания.

+1

В рамках minishift мы реализовали https://github.com/minishift/minishift/issues/1316, и до сих пор это работает хорошо. Сейчас мы ищем альтернативы, чтобы сделать то же самое для других гипервизоров с течением времени, но сначала мы исправим адрес, используя https://github.com/minishift/minishift/issues/1457 (чтобы предотвратить назначение нового адреса). . Мы пока не смогли зарезервировать время, собираемся посадить и это в миникубе.

+1

Самый простой обходной путь, который я нашел, - это полагаться на последовательность запуска виртуальных машин докер-машиной.

VirtualBox имеет DHCP-сервер, который начинает назначать IP-адреса с 192.168.99.100.

  1. Остановить все виртуальные машины
    docker-machine stop ${docker-machine ls -q}
    Этот шаг освободит все назначенные адреса для VirtualBox DHCP.

  2. Запускаем виртуальные машины по порядку
    docker-machine start vbox1 && docker-machine start vbox2 && docker-machine start vbox3
    Эти шаги назначают IP следующим образом:
    192.168.99.100: vbox1
    192.168.99.101: vbox2
    192.168.99.102: vbox3

Обратите внимание, что docker-machine start vbox1 vbox2 vbox3 не сработает, но я не понимаю, почему.

+1

когда я запускаю docker-machine.exe start , для DHCP требуется более 15 секунд waiting for an IP (если интернет не работает, это занимает более 2 минут), я думаю, если можно установить статический IP-адрес, он может быстро загрузиться .

Эта функция была добавлена ​​в Minishift некоторое время назад, но она
требуется модификация ISO для работы.
На Hyper-V мы столкнулись с проблемами, которых нет в образе boot2docker.
играл хорошо ... так что он работал только с образами на основе CentOS и Fedora.
Кроме того, это не работает с текущим драйвером KVM, поскольку он полагается на DHCP.

Это потребует небольшого изменения дизайна ...

Вс, 3 февраля 2019 г., в 23:08 fcying [email protected] написал:
>

когда я запускаю docker-machine.exe start, для DHCP, ожидающего IP-адреса, требуется более 15 секунд (если интернет не работает, это занимает более 2 минут), я думаю, если можно установить статический IP-адрес, он может быстро загрузиться.

-
Вы получили это, потому что прокомментировали.
Ответьте на это письмо напрямую, просмотрите его на GitHub или отключите обсуждение.

-

Жерар Брэд | http://gbraad.nl
[Работа с открытым исходным кодом]

Самый простой обходной путь, который я нашел, - это полагаться на последовательность запуска виртуальных машин докер-машиной.

VirtualBox имеет DHCP-сервер, который начинает назначать IP-адреса с 192.168.99.100.

  1. Остановить все виртуальные машины
    docker-machine stop ${docker-machine ls -q}
    Этот шаг освободит все назначенные адреса для VirtualBox DHCP.
  2. Запускаем виртуальные машины по порядку
    docker-machine start vbox1 && docker-machine start vbox2 && docker-machine start vbox3
    Эти шаги назначают IP следующим образом:
    192.168.99.100: vbox1
    192.168.99.101: vbox2
    192.168.99.102: vbox3

Обратите внимание, что docker-machine start vbox1 vbox2 vbox3 не сработает, но я не понимаю, почему.

Иногда мне приходилось убивать процесс VBoxNetDHCP.exe в Windows, чтобы vbox назначал IP-адреса, начиная с 192.168.99.100.
В противном случае vbox не будет выпускать IP-адреса, используемые предыдущими машинами (не знаю, почему)

👍

Это действительно облегчило бы мне жизнь.

Самый простой обходной путь, который я нашел, - это полагаться на последовательность запуска виртуальных машин докер-машиной.

VirtualBox имеет DHCP-сервер, который начинает назначать IP-адреса с 192.168.99.100.

  1. Остановить все виртуальные машины
    docker-machine stop ${docker-machine ls -q}
    Этот шаг освободит все назначенные адреса для VirtualBox DHCP.
  2. Запускаем виртуальные машины по порядку
    docker-machine start vbox1 && docker-machine start vbox2 && docker-machine start vbox3
    Эти шаги назначают IP следующим образом:
    192.168.99.100: vbox1
    192.168.99.101: vbox2
    192.168.99.102: vbox3

Обратите внимание, что docker-machine start vbox1 vbox2 vbox3 не сработает, но я не понимаю, почему.

Это очень полезно.

Чтобы назначить static ip address 192.168.99.50 моей докер-машине (по умолчанию) на VirtualBox, я использовал:

$ echo -e "kill \`cat /var/run/udhcpc.eth1.pid\`\nifconfig eth1 192.168.99.50 netmask 255.255.255.0 broadcast 192.168.99.255 up" | docker-machine ssh default sudo tee /var/lib/boot2docker/bootsync.sh > /dev/null

$ docker-machine restart default
Restarting "default"...
(default) Check network to re-create if needed...
(default) Waiting for an IP...
Waiting for SSH to be available...
Detecting the provisioner...
Restarted machines may have new IP addresses. You may need to re-run the `docker-machine env` command.

$ docker-machine env
Error checking TLS connection: Error checking and/or regenerating the certs: There was an error validating certificates for host "192.168.99.50:2376": x509: certificate is valid for 192.168.99.103, not 192.168.99.50
You can attempt to regenerate them using 'docker-machine regenerate-certs [name]'.
Be advised that this will trigger a Docker daemon restart which might stop running containers.

$ docker-machine regenerate-certs default
Regenerate TLS machine certs?  Warning: this is irreversible. (y/n): y
Regenerating TLS certificates
Waiting for SSH to be available...
Detecting the provisioner...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...

$ docker-machine env
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.50:2376"
export DOCKER_CERT_PATH="/Users/mandrake/.docker/machine/machines/default"
export DOCKER_MACHINE_NAME="default"
# Run this command to configure your shell:
# eval $(docker-machine env)

Моя среда - OSX, VirtualBox (boot2docker.iso)

Надеюсь, это может быть полезно 🙂
Кстати: +1 для запроса новой функции 😉
Ваше здоровье.

Да, есть возможность создать с конкретным ip. Все, что вам нужно сделать, это указать ip / ip-range с помощью
--virtualbox-hostonly-cidr вариант.

Например:

  • если вы хотите назначить конкретный IP-адрес, скажем, вы хотите назначить 10.15.1.24, тогда будет соответствующая конфигурация (самое важное - это маска, которую мы здесь используем. Для конкретного IP-адреса вам нужно установить маску подсети равной 32):
    docker-machine create --driver virtualbox --virtualbox-hostonly-cidr "10.15.1.24/32" dev

  • если вы хотите выбрать IP-адрес из определенного диапазона IP-адресов, вам необходимо использовать соответствующую маску подсети.

Если проблема заключается в том, что вам нужно постоянно обновлять файл хоста, вы можете просто установить Avahi в свой контейнер и использовать mDSN.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги