使用docker-machine和VirtualBox如何创建具有特定URL的docker机器?

15

我可以使用VirtualBox驱动程序创建一个Docker实例,但我无法弄清如何指定URL。

创建命令:

docker-machine create --driver virtualbox myBox

docker-machine ls:

NAME      ACTIVE   DRIVER       STATE     URL                         SWARM
myBox     *        virtualbox   Running   tcp://192.168.99.100:2376   

我希望URL是一个特定的URL。如何强制Docker实例使用特定的URL(例如:192.168.99.113)?

细节:Mac 10.10.5使用Docker工具箱

更新

我尝试使用--virtualbox-hostonly-cidr命令设置docker机器的IP范围;我指定了一个IP地址的范围("192.168.99.113/32"),但创建出来的机器的IP是192.168.99.100,超出了我提供的范围。

是否可能设置特定IP地址的docker机器?


4
我使用 $(docker-machine ip myBox) 来获取 IP 地址,因此无需担心 IP 地址会保持变化。 - BMW
3个回答

9
我们曾经遇到过同样的问题,尝试在docker机器中更改默认的docker IP,并且我们只找到了两种方法来解决它。
  1. 您可以使用docker machine的create命令调用标志创建Docker实例。

    --virtualbox-hostonly-cidr "192.168.99.1/24"

    该标志设置一系列地址,可为Docker实例设置。不能保证您获得想要的地址

  2. 您可以更改虚拟机的网络设置,保留NAT和端口转发,使您的Docker实例运行起来像安装在主机操作系统上一样。

当然,第一种方法是标准方法,似乎更可取。但在某些情况下,第二种方法也可能很有用。 更新: 存在一个开放的特性请求,用于指定docker machine的静态IP地址。因此,很遗憾现在还无法这样做。只有--virtualbox-hostonly-cidr属性可用,但必须提供CIDR前缀低于29,才能使其正常工作(已在Win版本中测试)。或者看看此评论,其中显示如何通过配置Virtual Box在OS X上执行此操作。
$ 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

4
问题1709解决之前,我使用以下脚本(Windows脚本,需要适配mac)。
(来源:imranraja85micheletedeschi评论
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

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"

我启动虚拟机 (docker-machine start <machine-name>),然后执行以下操作:

dmvbf <machine-name> 99 101

我只做一次。

下一次执行 docker-machine start <machine-name> 时,IP地址将是192.168.99.101。


2

根据docker/machine的功能请求线程的讨论,我们编写了以下脚本

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接