web-dev-qa-db-ja.com

docker-machineに特定のIPでvmを作成させる方法はありますか?

Docker-machineに特定のIPを使用してdocker vmを強制的に作成する方法はありますか(IPが使用可能であると想定)。

25
ashic

docker/machine issue 1709 で積極的にリクエストされています

Docker-machine createでIPアドレスを作成するときに、VM(つまり、docker-machine lsの「URL」の下にリストされている値)のIPアドレスを指定できるようにします。

Boot2dockerのデフォルトアドレス192.168.59.103に依存していたので、これが欲しいのですが、現在はマシンによって異なります。

現在の回避策

私のvirtualboxのdhcp範囲は192.168.99.100-255で、100の前にIPを設定したいです。

静的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追加

コマンドを次のように更新しました。

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によって変更されなくなります

prova-discoveryをdocker-machineの名前に置き換えてください)


上記の内容に基づいて、現在使用している(Windows)スクリプト(dmvbf.bat)を次に示します。

@echo off
setlocal enabledelayedexpansion
set machine=%1
if "%machine%" == "" (
    echo dmvbf expects a machine name
    exit /b 1
)
set ipx=%2
if "%ipx%" == "" (
    echo dmvbf x missing ^(for 192.168.x.y^)
    exit /b 2
)
set ipy=%3
if "%ipy%" == "" (
    echo dmvbf y missing ^(for 192.168.x.y^)
    exit /b 3
)

echo kill $(more /var/run/udhcpc.eth1.pid) | docker-machine ssh %machine% Sudo tee /var/lib/boot2docker/bootsync.sh >NUL
echo ifconfig eth1 192.168.%ipx%.%ipy% netmask 255.255.255.0 broadcast 192.168.%ipx%.255 up | docker-machine ssh %machine% Sudo tee -a /var/lib/boot2docker/bootsync.sh >NUL
echo route add default gw <gateway ip address here> | docker-machine ssh %machine% Sudo tee /bar/lib/boot2docker/bootsync.sh >NUL

docker-machine ssh %machine% "Sudo cat /var/run/udhcpc.eth1.pid | xargs Sudo kill"

docker-machine ssh %machine% "Sudo ifconfig eth1 192.168.%ipx%.%ipy% netmask 255.255.255.0 broadcast 192.168.%ipx%.255 up"

(注:Windows 10では、 Monty Wildcomments であることudhcpc.eth0.pidudhcpc.eth1.pidではありません)

Vm(docker-machine start <machine-name>)を開始し、次に:

 dmvbf <machine-name> 99 101

私は一度だけそれをします。

次のdocker-machine start <machine-name>では、IPは192.168.99.101になります。

30
VonC

以下のスクリプトは、マシン名としてdefaultを使用し、10.100.1.100を静的IPアドレスとして。

cat << EOF | docker-machine ssh default Sudo tee /var/lib/boot2docker/bootsync.sh > /dev/null
ifconfig eth1 10.100.1.100 netmask 255.255.255.0 broadcast 10.100.1.255 up
ip route add default via 10.100.1.1
EOF

マシンを再起動します。

docker-machine restart default

証明書を再生成します。

docker-machine regenerate-certs default -f

最後に、環境変数を表示します。

docker-machine env default
1
Bruno Wego

VirtualBoxのDHCP範囲を変更しました。上限と下限の両方を192.168.99.100にし、ドッカーマシンを再起動しました。範囲を変更するには、VirtualBox-> Files-> Host network manager->適切なアダプターを選択->上限を変更します。

1
humbleCoder

私の回避策は、DockerマシンがどのVBoxNetに接続されているかを確認し、VirtualBoxに移動してDHCP範囲をリセットし、マシンに必要なIPのみを配信することでした。

0
Thaddeus Aid

はい、特定のIPで作成するオプションがあります。必要なのは、-virtualbox-hostonly-cidrオプションでip/ip-rangeを指定することだけです。

例えば:

  • 特定のIPを割り当てる場合、10.15.1.24を割り当てるとしましょう。適切な構成は次のようになります(最も重要なことは、ここで使用しているマスクです。特定のIPの場合、サブネットマスクを32に設定する必要があります)。

    docker-machine create --driver virtualbox --virtualbox-hostonly-cidr "10.15.1.24/32" dev

  • 特定のIP範囲からIPを選択する場合は、適切なサブネットマスクを使用する必要があります。

0
Nigel