有没有办法强制停泊机使用特定的ip创建vm? [英] Is there a way to force docker-machine to create vm with a specific ip?

查看:147
本文介绍了有没有办法强制停泊机使用特定的ip创建vm?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有没有办法强制docker-machine使用特定的ip创建docker vm(假设ip可用)?

解决方案

docker / machine issue 1709


我想要能够指定一个虚拟机的IP地址(即在Docker中的URL下列出的值) -machine ls)当我用docker-machine创建它创建它。



我想要这个,因为我一直依靠boot2docker的默认地址192.168.59.103,但现在它不同的机器。


当前的解决方法


我的虚拟机有dhcp范围192.168.99.100 - 255,我想设置一个IP在100之前。



我发现一个简单的技巧来设置静态IP:我创建一个机器,我运行这个命令并重新启动机器:




  echoifconfig 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 




此命令创建一个文件 c code code code code code code code code code code在机器启动期间,执行命令并设置静态IP。




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

Michele Tedeschi( micheletedeschi 添加



我已更新命令:

  echokill`more /var/run/udhcpc.eth1.pid`\\\
ifconfig eth1 192.168。 99.50网络掩码255.255.255.0 broadcast 192.168.99.255 up| docker-machine ssh prova-discovery sudo tee /var/lib/boot2docker/bootsync.sh> / dev / null




然后运行命令(只有第一次) / p>



  docker-machine regenerate-certs prova-discovery 




现在,DHCP不会更改IP


(以您的码头机的名称替换 prova-discovery






这里是(Windows)脚本( dmvbf.bat )我现在使用,基于上面的内容:

  @echo off 
setlocal enabledelayedexpansion
set machine =%1
如果%machine%= =(
echo dmvbf期望机器名称
exit / b 1

set ipx =%2
如果%ipx%== (
echo dmvbf x missing ^(for 192.168.xy ^)
exit / b 2

set ipy =%3
如果%ipy%= =(
echo dmvbf y missing ^(for 192.168.xy ^)
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 | | 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

我启动vm( docker-machine start< machine-name> / code>),然后:

  dmvbf< machine-name> 99 101 

我只做一次。



在下一个 docker-machine start< machine-name> 中,IP将为192.168.99.101。


Is there a way to force docker-machine to create the docker vm with a specific ip (assuming that ip is available)?

解决方案

That is actively requested in docker/machine issue 1709

I want to be able to specify the IP address of a VM (i.e. the value that's listed under "URL" in docker-machine ls) when I create it with docker-machine create.

I want this because I've been relying on boot2docker's default address of 192.168.59.103, but now it varies from machine to machine.

The current workaround:

My virtualbox has dhcp range 192.168.99.100 - 255 and I want to set an IP before 100.

I've found a simple trick to set a static IP: after create a machine, I run this command and restart the machine:

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

This command create a file bootsync.sh that is searched by boot2docker startup scripts and executed.

Now during machine boot the command is executed and set static IP.

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

Michele Tedeschi (micheletedeschi) adds

I've updated the commands with:

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

then run command (only the first time)

docker-machine regenerate-certs prova-discovery

now the IP will not be changed by the DHCP

(replace prova-discovery by the name of your docker-machine)


Here is the (Windows) script (dmvbf.bat) I now use, based on what is above:

@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"

I start the vm (docker-machine start <machine-name>), and then:

 dmvbf <machine-name> 99 101

I do that only once.

At the next docker-machine start <machine-name>, the IP will be 192.168.99.101.

这篇关于有没有办法强制停泊机使用特定的ip创建vm?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆