Machine: x509:证书对192.168.99.103有效,而不对192.168.99.100有效

创建于 2015-02-11  ·  94评论  ·  资料来源: docker/machine

使计算机在.103 IP上运行后,我重新启动了Mac。 重新启动后,我的docker-machine切换到.100地址。 当我尝试在机器上执行任何docker命令时,我得到的是这样的信息:

docker exec -it mycontainer bash
FATA [0000]尝试连接时发生错误:Post https://192.168.99.100:2376 / v1.16 / containers / mycontainer / exec:x509:证书对192.168.99.103有效,而不对192.168.99.100有效

drivevirtualbox kinbug

最有用的评论

重启后,在Windows上使用Docker Toolbox 1.9.1来解决此问题,导致VM被分配了不同的IP,这是google上的热门话题。

因此,对于任何其他想要解决此问题的人,当前的修复方法都更加容易。 (其中default是您的Docker机器)

docker-machine regenerate-certs default

所有94条评论

您能否提供更多有关此问题的详细信息?

  • 什么版本的机器?
  • 什么驱动程序(我假设vbox基于IP)?
  • 用于创建机器的命令行

谢谢

docker机器版本0.1.0
虚拟箱
docker-machine create -d virtualbox --virtualbox-磁盘大小'40000'--virtualbox-内存'4096'devbox

我还向守护程序添加了--insecure-registry,以便可以与我们的私有注册表进行对话(如果有关系的话)。

您可以介意由master进行测试吗(如果您不想在本地构建,可以使用https://docker-machine-builds.evanhazlett.com/latest/)。 我已经使用更改IP的VM进行了测试,并且一切正常。

ehazlett machine> docker-machine ls
NAME        ACTIVE   DRIVER       STATE     URL
test-vbox   *        virtualbox   Running   tcp://192.168.99.100:2376
ehazlett machine> docker-machine stop test-vbox
ehazlett machine> docker-machine create -d virtualbox test-vbox-2
...
ehazlett machine> docker-machine ls
NAME          ACTIVE   DRIVER       STATE     URL
test-vbox              virtualbox   Stopped   
test-vbox-2   *        virtualbox   Running   tcp://192.168.99.100:2376
ehazlett machine> docker-machine start test-vbox
...      
ehazlett machine> docker-machine ls
NAME          ACTIVE   DRIVER       STATE     URL
test-vbox              virtualbox   Running   tcp://192.168.99.101:2376
test-vbox-2   *        virtualbox   Running   tcp://192.168.99.100:2376            
ehazlett machine> docker $(docker-machine config test-vbox) ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

您可以看到test-vbox交换IP。

好的,这是我所做的:

停止当前机器
开始使用新的机器纸槽
使用新机器的“机器ls”还可以,并显示:
“ devbox * virtualbox运行tcp://192.168.99.100 :2376
devbox2 virtualbox已停止”

“码头工人信息”产生:
FATA [0000]尝试连接时发生错误:获取https://192.168.99.100:2376 / v1.16 / info:x509:证书对192.168.99.103有效,而不对192.168.99.100有效

谢谢。 您是否尝试过上面的主版本? 我执行的操作与您执行的步骤相同,并且没有任何证书问题。

我下载了该“最新”二进制文件。

嗯。。好。 @sthulb您可以尝试看看是否可以重现吗?

  • 创建一个虚拟机
  • 先停止机器
  • 创建第二台虚拟机
  • 启动第一台机器
  • 检查第一台机器IP是否已更改
  • 检查是否可以同时访问docker守护程序

@stephenlawrence这个过程正确吗?

谢谢

@ehazlett从技术上讲,这不是它的开始方式。 当我重新启动Mac时,它开始了,并且DM在重新启动时提供了另一个IP。 我不知道这与您所做的描述是否有所不同。 但是现在,任何尝试访问该先前运行的计算机的尝试都会产生x509消息。

@stephenlawrence我无法重新创建该地址,因为我的IP总是在变化,而VM仍然存在。 我只是简单地模拟了VM获得不同的IP,这将创建我认为相同的东西。 您介意使用新的二进制文件和一组新的VM尝试上述操作吗? 我想知道这些证书是否是使用旧版本创建的,而不是使用正确的过程或某些东西创建的。

@stephenlawrence您确定bashrc中没有与设置有关的东西吗?例如DOCKER_CERT_PATH?

由于我没有看到其他人引用相关的代码,因此我只是指出machine正在使用此处的IP地址创建证书: https :

如果IP地址更改,则该证书将不再起作用。

在b2d初始化脚本中,如果相关IP地址发生更改,则有一些代码可以重新生成服务器证书: https :

我不完全确定为什么在machine情况下没有触发那部分b2d代码,因为我以为你们正在使用b2d ISO。

是的,谢谢,我知道当IP更改时,此代码在那里(因为
如上所示)在测试时没有问题,所以我至少
得到这个可复制的测试。

2015年2月14日星期六,上午12:58,Mike Dillon [email protected]
写道:

由于我没有看到其他人引用相关代码,因此我只是
指出机器正在使用IP地址创建证书
在这里:
https://github.com/docker/machine/blob/973b267fec3ec0a900e26557475b387891c0138a/host.go#L123

如果IP地址更改,则该证书将不再起作用。

在b2d init脚本中,有一些代码可以重新生成服务器
如果相关IP地址更改,则证书:
https://github.com/boot2docker/boot2docker/blob/5db7efbb4e0557f6efefdb56cb0263f80ed55834/rootfs/rootfs/usr/local/etc/init.d/docker#L46

我不完全确定为什么在浏览器中没有触发那段b2d代码
因为我以为你们使用的是b2d ISO。

-
直接回复此电子邮件或在GitHub上查看
https://github.com/docker/machine/issues/531#issuecomment -74363452。

@ md5 @stephenlawrence您介意检查一下是否有偶然的机会使用b2d证书? 调试后,看来b2d证书正在与机器一起使用。

@ehazlett我不确定您要我检查什么。

@ md5对不起,我应该更清楚了。 检查环境变量DOCKER_CERT_PATHDOCKER_HOST以查看它们是否指向正确的机器。 听起来好像DOCKER_CERT_PATH在访问计算机时可能已配置为b2d证书,反之亦然。

@ehazlett如果这是错误的DOCKER_CERT_PATH ,那就是另一个错误。 在这种情况下,问题可能是ca.pem不是Docker服务器在machine受控实例上提供的证书的信任根,还是cert.pem客户端证书服务器不接受。

我们在这里看到的错误显然是客户端(即docker exec )不接受服务器的证书。 它试图以192.168.99.100命中服务器,但服务器出示的证书仅对192.168.99.103 。 这仅意味着将在端口2376上以192.168.99.100响应的服务器配置为使用为192.168.99.103创建的证书。

@ md5有意义。 如何重新创建? 如您在上面看到的,我已经更改了我的virtualbox实例的IP,但是没有看到这个问题。

这是个好问题。 我也无法自己复制它。

由于我们似乎无法复制而结束。 我的怀疑是boot2docker VM和机器实例的环境变量混合在一起。 我建议您检查您的.bashrc等是否有可能设置它们的东西。

我再次发生此问题。 我有一台运行在192.168.99.101上的docker-machine,重新启动Mac之后,该机器现在正在192.168.99.100上运行。

这似乎是一个docker问题,因为我可以在容器中执行“ docker-compose run”,但是尝试任何docker命令都将引发以下错误:

$ docker ps
FATA [0000]尝试连接时发生错误:获取https://192.168.99.100:2376 / v1.17 / containers / json:x509:证书对192.168.99.101有效,而不对192.168.99.100有效

当前环境:
DOCKER_CERT_PATH = /用户/myusername/.docker/machines/.client
DOCKER_TLS_VERIFY =是
DOCKER_HOST = tcp://192.168.99.100 :2376

$ ls -l〜/ .docker / machines / .client /
总计48
-rw-r--r-- 1 myusername员工1054 Feb 11 10:21 ca.pem
-rw-r--r-- 1个myusername人员1054 Jan 30 08:53 ca.pem.bak
-rw-r--r-- 1个myusername员工1094 2月11日10:21 cert.pem
-rw-r--r-- 1个myusername人员1094 Jan 30 08:53 cert.pem.bak
-rw ------- 1 myusername员工1675 2月11日10:21 key.pem
-rw ------- 1名myusername员工1679年1月30日08:53 key.pem.bak

@stephenlawrence好的,好的。 您是否也会偶然使用b2d? 我唯一看到的是在b2d和机器之间的东西。 我无法亲自复制,但与证书和环境变量有关。

也许我们需要尽快而不是稍后的“ regenerate-certs”命令:)

好吧,在切换到DM之前,我一直单独使用b2d。 DM也使用b2d吗?

@stephenlawrence只需使用machine来管理b2d 。 删除原始的b2d安装和VM

我也遇到过这种情况。 我使用machine创建虚拟机,而不是直接创建b2d 。 生成证书的命令听起来很有帮助。

删除b2d不一定能解决我的问题,但是我已将其删除。

我还要补充一点,这使docker-machine目前无法使用。 我刚刚创建了新机器,希望能解决该问题,但是在新机器上却遇到了同样的问题。

@stephenlawrence您可以在上面尝试我的PR,看看是否可以解决问题? 它应该会为实例重新生成证书。

702为我修复了此问题:微笑:重新启动Mac后,在machine start工作后,重新生成证书。

@jeffdm thx的反馈!

我认为这仍然是一个问题。 我可以想到两种可能的解决方案:

  • 假定IP地址将更改。 我们需要检查TLS握手中的IP地址吗? 我们不能验证机器具有的特定证书吗?
  • 不依赖DHCP。 也许我们可以给虚拟机提供静态IP?

我遇到了类似的问题...我正在使用的Cisco VPN客户端设置了ipfw规则,该规则几乎阻止了访问绑定到vboxnetN的192.168.x地址的功能。

所以我在virtualbox中设置了端口映射规则,以便127.0.0.1:2376命中docker服务器。 问题在于,Docker服务器的证书用于192.168.99.101,而不是127.0.0.1:

$ export DOCKER_TLS_VERIFY =“”
$码头图片
FATA [0000]获取http://127.0.0.1:2376 / v1.17 / images / json:格式错误的HTTP响应“ \ x15 \ x03 \ x01 \ x00 \ x02 \ x02”。 您是否要连接到没有TLS的启用TLS的守护程序?
$ export DOCKER_TLS_VERIFY =是
$码头图片
FATA [0000]尝试连接时发生错误:获取https://127.0.0.1:2376 / v1.17 / images / json:x509:证书对192.168.99.101有效,而不对127.0.0.1有效
$ docker --tlsverify = false图片
(这有效)

尽管这不是一个显示停止器,但我可以在所有手动运行命令中都加上“ --tlsverify = false”,但其他工具(例如,fig)则不会这样做。 同样由于某种原因,DOCKER_OPTS对我不起作用。

创建virtualbox实例时,也许可以选择使它同时对另一个地址有效的证书? 我可以看到,如果服务器具有同时使用的内部和外部IP地址(例如在ec2中,但是我将使用DNS名称),这也是一个问题。

@cwilkes存在/存在一个问题,允许对其进行配置。

看起来https://github.com/docker/machine/pull/702可能会帮助我,今天我看到它已被推送到master https://github.com/docker/machine/compare/v0.1.0。 .master。 希望不久将有一个0.1.1版本:)

在与@sthulb@nathanleclaire讨论之后,我认为我们应该进行类似于b2d的检查。 我们可以在机器启动时检查IP,并将其与证书中的IP SAN进行比较。 如果它们不匹配,我们可以重新生成。 想法@sthulb @nathanleclaire吗?

同意

是的,请@ehazlett

+1有相同的问题

我也遇到了这个问题。 我使用AWS驱动程序启动了计算机,然后将弹性IP分配给该设备。 尝试通过CLI停止和启动机器,但是每次在激活env后运行docker ps ,都会得到:

certificate is valid for 52.11.XXX.XXX, not 52.10.XXX.XXX

我确实尝试过手动更改“〜/ .docker / machine”配置中的IP。 那没有用。

@杜罗@killerwolf @cwilkes @jeffdm @stephenlawrence @ md5

请结帐#770。 这会在证书错误的情况下增加自动重新生成。 请注意,它仅适用于configenv命令,因此,如果您在使用docker时遇到问题(即docker ps等),则需要运行$(docker-machine env <name>)docker $(docker-machine config <name>) ps进行修复。 该PR还增加了使用regenerate-certs命令手动重新生成证书的功能(我使用了#702的功能)。

希望这将彻底解决TLS错误:)

在aws实例正常重启后,我检测到AWS IP更改。
docker-machine ssh amazonec2-03仅在/.docker/machine/machines/machines/amazonec2-03/confg.json手动编辑IPAddress后才能工作

docker daemon证书无效,我明天可以检查#770。

PTAL @nathanleclaire @sthulb

如果遇到相同的问题,很快就会签出#770 ...

您可以使用当前的头部:)

或者您可以使用RC-它们已解决。

遇到同样的问题,但是使用最新的里程碑版本0.2.0可以解决! 谢谢!

@gschmutz感谢您的反馈!

自从升级到1.7.0以来,我一直在使用它。
重新启动b2d将导致此错误:

$ eval "$(boot2docker shellinit)"
Writing /Users/gravis/.boot2docker/certs/boot2docker-vm/ca.pem
Writing /Users/gravis/.boot2docker/certs/boot2docker-vm/cert.pem
Writing /Users/gravis/.boot2docker/certs/boot2docker-vm/key.pem
Your environment variables are already set correctly.
$ docker ps -a
An error occurred trying to connect: Get https://192.168.59.103:2376/v1.19/containers/json?all=1: x509: certificate is valid for 127.0.0.1, 10.0.2.15, not 192.168.59.103

谢谢

@gravis你怎么在机器上使用boot2docker shellinit

抱歉,我在错误的仓库中发布了:)
我以为是b2d,弄乱了我的标签。

对于遇到此问题的其他任何人,这是一个可能的解决方案: https :

https://github.com/boot2docker/boot2docker/pull/411

到目前为止,这已经为我解决了问题。 我可以看到/ var / lib / boot2docker / tls / hostnames文件没有虚拟机的IP(即,它没有您键入时看到的IP:boot2docker ip),因此可以添加它(它添加建议的延迟后,将显示在主机名列表的末尾)。

我前一段时间测试了boot2docker,忘记了很长时间,今天我下载了最新版本的boot2docker并安装了它。 安装后,我遇到了这里提到的相同的X.509问题,我通过以下方法解决了该问题

1)删除.boot2docker目录(位于我的主目录中)及其内容,以及
2)也删除所有boot2docker虚拟机文件

希望这可以帮助。

ps。 因为我只测试了boot2docker,所以我不在乎删除这些东西时是否丢失了东西...

我用pasitolonen修复问题的方式解决了问题。 删除.boot2docker dir并运行boot2docker init。 这具有删除图像的副作用(我不介意)。

每当wifi更改时,这都会发生在我身上。 例如,当我在家中使用它,然后在办公室中再次使用它时。

错误:尝试连接时发生错误:获取https://192.168.59.104:2376 / v1.19 /版本:x509:证书对127.0.0.1、10.0.2.15有效,而不对192.168.59.104有效

$泊坞窗版本
客户端版本:1.7.0
客户端API版本:1.19
Go版本(客户端):go1.4.2
Git提交(客户):0baf609
操作系统/ Arch(客户端):darwin / amd64

显然这似乎解决了问题: https :

alias docker="docker --tlsverify=false"

重新分配RAM后,我经历了这一点。 作为rajaraodv提到alias docker="docker --tlsverify=false"解决

建议永远不要禁用安全性( --tlsverify=false )。

对我有用的解决方法是boot2docker ssh 'sudo /etc/init.d/docker restart' ,这将导致Docker生成除其他IP地址外还适用于boot2docker的新x509证书。 请先尝试关闭安全功能。

@indygreg解决方案为我工作。 非常感谢。

@indygreg也救了我。 谢谢!

谢谢它也对我有用:-)

大家好,如果您仍然遇到boot2docker的证书问题,请确保首先尝试boot2docker upgrade将您的VM更新到最新版本(1.7.1修复了此问题),以及是否还有其他问题在github.com/boot2docker/boot2docker-cli上报告问题。 此存储库适用于Docker Machine问题。 谢谢!

@indygreg太棒了

@indygreg谢谢它也对我

@indygreg也为我工作! 谢谢。

为我工作,谢谢!

谢谢@indygreg! 我在此处添加了评论链接,以便Googler可以轻松查看他的建议。

https://github.com/docker/machine/issues/531#issuecomment -120554419

重启后,在Windows上使用Docker Toolbox 1.9.1来解决此问题,导致VM被分配了不同的IP,这是google上的热门话题。

因此,对于任何其他想要解决此问题的人,当前的修复方法都更加容易。 (其中default是您的Docker机器)

docker-machine regenerate-certs default

感谢@johnmccabe ,为我在OS X上使用Docker Toolbox 1.10.0工作。

由于切换无线局域网并有时使用VPN,这在我身上经常发生。 有没有办法可以将其自动化? 还是这些证书可以对一定范围的IP地址有效?

@johnmccabe注意,您只需确保您的VM始终以相同的IP开头: http : //stackoverflow.com/a/35367277/6309

我正在使用OS X,并且厌倦了使用这些hack并最终将其破坏。

Vagrant可以选择在配置中设置IP地址。 我不明白为什么这种参数或标志在docker-machine中不存在(只是与流浪汉比较,因为两者都使用virtualbox)

@onnimonni :这个问题已经解决了很长时间(将近一年)。 机器包含一个命令,以在IP发生更改的情况下重新生成证书。

我只是第一次遇到这个问题,并使用以下任一选项成功检查了该线程中的所有内容:(选择一个)

  • docker-machine regenerate-certs default2
  • docker-machine kill default2然后docker-machine create default2 ...
  • docker-machine upgrade default2 (如果尚未升级)

要在OSX上重现此问题:

  1. 安装Docker Toolbox(v1.10)
  2. 创建一个获取192.168.99.100的default机器
  3. 创建一个获取192.168.99.101的default2机器
  4. 都关闭(有时也需要重新启动)
  5. docker-compose start default2得到192.168.99.100(和x509证书冲突)

所以归结为以不同顺序启动的多台机器可能会导致不同的IP,这会破坏证书,这需要在github上搜索此问题以找到创建新证书的解决方案,以允许您再次使用它们...有没有办法防止这种情况发生? 人们在多台docker机器之间切换是否如此不寻常?

$ alias docker =“ docker --tlsverify = false”为我工作!

@ivancarrancho为什么不docker-machine regenerate-certs -f并保持启用TLS?

@nathanleclaire是的,比“ --tlsveify”要好很多,谢谢

@nathanleclaire,因为它需要大约4分钟的时间...想象一下,您有6个以上节点的集群...我将不得不编写一个并行证书再生器,以免通过重新生成某些证书来花费一整天的时间...。此外,它将重新启动所有目标机器上的docker容器...

IP地址更改后重新生成证书的要求对AWS云造成了极大的痛苦...公共IP一直在变化。 我知道的唯一解决方案是从ec2实例创建新实例,但是由于某种原因,它不起作用https://github.com/docker/machine/pull/1453#issuecomment -215371216

顺便说一句,如果docker-machine create --amazonec2-use-private-address应该从另一个ec2实例创建一个ec2实例呢?

这是我知道如何避免不断生成证书的唯一方法...

顺便说一句,如果docker-machine create --amazonec2-use-private-address应该从另一个ec2实例创建一个ec2实例呢?

是的,除非您必须通过其他方式从创建节点(例如,代理)访问私有IP。

我们正在考虑采用多种解决方案,例如Elastic IP,以潜在地解决此问题。

是的,但是正如我提到的,即使使用此选项,它仍挂在ssh访问上
已启用
2016年5月2日20:26,“ Nathan LeClaire” [email protected]写道:

顺便说一句,如果docker-machine create --amazonec2-use-private-address是
应该从另一个EC2实例创建一个EC2实例?

是的,除非您必须通过其他方式访问
创建节点(例如代理)。

我们正在考虑采用多种解决方案,例如弹性IP
解决此问题。

-
您收到此邮件是因为您发表了评论。
直接回复此电子邮件或在GitHub上查看
https://github.com/docker/machine/issues/531#issuecomment -216319103

也许安全组配置不正确? 当前,如果使用--amazonec2-use-private-ip-address ,则假定用户愿意确保事先正确配置了这类网络访问详细信息。

我不明白为什么每次需要通过终端启动docker时都要运行该丑陋的$ eval语句。

我不明白为什么这个问题甚至存在。

Docker越来越像是一种破烂的产品,许多人都将其抛在后面,因为它是“内在”的东西。

我使用的是dockerdocker-machine的最新版本,但仍然存在相同的问题,我通过创建了几个virtualbox docker host

    docker-machine create -d virtualbox xxxx \
        --engine-opt="cluster-store=${KVSTORE}" \
        --engine-opt="cluster-advertise=eth1:2376" \
        ${NAME}
...

几乎每次我重新启动VM或重新启动Mac时,我都会遇到类似certificate is valid for 192.168.99.100, not 192.168.99.101的错误。

我的版本是:

$ docker --version
Docker version 1.12.0-rc4, build e4a0dbc, experimental
$ docker-machine -v
docker-machine version 0.8.0-rc2, build 4ca1b85
$ vboxmanage -v
5.1.0r108711

有什么解决方案可以防止发生这些错误? 或创建具有固定IP的virtualbox主机?

解决方法: docker-machine provision

解决了docker-machine regenerate-certs xxx

$ docker-machine ls
NAME        ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER    ERRORS
xxx   -        virtualbox   Running   tcp://192.168.99.100:2376           Unknown   Unable to query docker version: Get https://192.168.99.100:2376/v1.15/version: x509: certificate is valid for 192.168.99.101, not 192.168.99.100
~$ docker-machine regenerate-certs xxx
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 ls
NAME        ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER    ERRORS
xxx   *        virtualbox   Running   tcp://192.168.99.100:2376           v1.12.6

@VonC链接之后,我遇到了docker-machine-ipconfig https://github.com/fivestars/docker-machine-ipconfig

 $ cd〜/ .docker /
 $ git clone https://github.com/fivestars/docker-machine-ipconfig.git
 #添加到〜/ .profile
 $ echo'别名docker-machine-ipconfig =〜/ .docker / docker-machine-ipconfig / docker-machine-ipconfig'>>〜/ .profile 
 $ source〜/ .profile

例如:为机器名称分配一个静态IP:

 $ docker-machine-ipconfig静态机器名
 #或指定隐式IP
 $ docker-machine-ipconfig静态机器名称192.168.99.110

这样就不必在每次重新启动时都需要docker-machine regenerate-certs -f machine-name 。 设置在virtualbox上运行的计算机静态IP的简单方法。

它支持Windows吗? 我的意思是“为”和“上”。

看起来仍然是一个问题。 有什么办法解决吗?

@johnmccabe
谢谢。
工作良好。 我刚刚重新启动了工具箱,一切都重新回到了游戏中。

我如何拥有容器的静态帐户,这使我每次重启docker-machine时都可以更改帐户?

我看到了docker-machine-ipconfig的解决方法,但仅出于文档目的,我在Windows 10 Docker Machine和Hyper-V中也报告了这种情况

可能希望调整此消息“启动的计算机可能具有新的IP地址。您可能需要重新运行docker-machine env命令。” 提到类似“并且也做docker-machine regenerate-certs ...” FWIW ...

@rdp不错,我有一个问题是半小时才看发生了什么,然后尝试用kubernetes做一些事情,安装和卸载了这些东西……
docker-machine env
我的环境中匹配的IP与产生错误的证书相匹配...
然后:
eval $(docker-machine env)
为我进行配置...

minikube stop && minikube start为我修复了此问题

minikube stop && minikube start为我修复了此问题

令人惊讶的是, @ PatMyron也对我

此页面是否有帮助?
0 / 5 - 0 等级