使用docker-machine提供的主机允许不安全的镜像仓库

35

有没有办法为使用docker-machine创建的docker守护进程配置--allow-insecure-ssl参数。

命令:

docker-machine create --driver virtualbox dev 
eval "$(docker-machine env dev)"
docker run myregistry:5000/busybox:latest echo 'hello world'

输出:

Unable to find image 'myregistry:5000/busybox:latest' locally
2015/06/04 16:54:17 Error: v1 ping attempt failed with error: Get          
https://myregistry:5000/v1/_ping: EOF. If this private  
registry supports only HTTP or HTTPS with an unknown CA certificate, 
please add `--insecure-registry myregistry:5000` to the 
daemon's arguments. In the case of HTTPS, if you have access to the 
registry's CA certificate, no need for the flag; simply place the CA 
certificate at /etc/docker/certs.d/myregistry:5000/ca.crt
5个回答

44
如果您正在运行docker-machine版本v0.2稳定版,则无法轻松设置docker选项。但在下一个版本v0.3中,通过创建参数解决了这个问题。
目前,该功能处于RC1版本状态,因此您可以使用版本v0.3.0-RC-1或等待下一个稳定版本v0.3.0(预计6月16日)的发布。
然后使用参数--engine-insecure-registry来为docker的守护程序设置--allow-insecure-ssl,例如:
docker-machine create --driver virtualbox --engine-insecure-registry myregistry:5000 dev

之后您可以执行:

docker run myregistry:5000/busybox:latest echo 'hello world'

此外,您可以在项目文档中阅读有关此的更多信息。

我是新手,正在使用1.8.1版本的Docker。尝试按照您的建议操作,但出现了以下错误:无法在本地找到图像“myregistry:5000/busybox:latest” 正在拉取存储库myregistry:5000/busybox 拉取镜像时出错:获取http://myregistry:5000/v1/repositories/busybox/images时出错:拨号tcp:查找myregistry:没有这样的主机 - krinker
尝试使用注册表的IP curl http://192.168.99.100:5000/v1/_ping curl:(7)无法连接到192.168.99.100的5000端口:连接被拒绝。 - krinker
myregistry是您网络上主机的已知名称,如果您的主机名为:registry.domain.com,则需要将myregistry替换为它。此外,您需要解析主机名,可以尝试使用ping yourhostname.domain.com命令。 - enrique-carbonell
1
我刚刚通过感到沮丧、关闭所有图像并关闭所有终端窗口来使其正常工作。之后,我使用以下命令创建了两个新的 docker 机器: docker-machine create --driver virtualbox --engine-insecure-registry ip.add.ress:5000 dev 然后它就工作了... 我猜测在某个地方设置了某些设置,导致了所有这些烦恼。到目前为止,我喜欢 docker,但是它真的不稳定... - krinker
这个目前是没有记录的,你是我的英雄。我会为你唱歌。 - xavier.cambar
所有这些都非常有帮助。在我的私人代码库推送失败后,这对我很有效。 - Josh

40

如果要将不安全的注册表添加到已创建的Docker机器中,则可以更新正在运行的Docker VM中的配置文件。

步骤

  1. 通过SSH登录本地Docker VM。
    注意:如果“default”不是您的Docker机器的名称,请将“default”替换为您的Docker机器名称。
    $ docker-machine ssh {machineName}

  2. 打开Docker配置文件。
    $ sudo vi /var/lib/boot2docker/profile

  3. 在配置文件底部添加此行。 如果EXTRA_ARGS已经存在,请将不安全注册表标志添加到EXTRA_ARGS中。 将路径[s]替换为您的注册表的路径。

    EXTRA_ARGS=" --insecure-registry myserver.pathTo.registry1:5000 --insecure-registry myserver.pathTo.registry2:5000 --insecure-registry myserver.pathTo.registry3:5000 "

  4. 保存配置文件更改,然后从docker-machine bash退出回到您的计算机。 然后重新启动Docker VM,将您的docker-machine名称替换为相应的名称。
    $ docker-machine restart {machineName}

  5. 从注册表拉取或推送一些内容,以确保它正常工作。

我的设置

docker-machine版本:0.6.0,构建e27fb87
docker-machine驱动程序:virtualbox


2
这对我来说是有效的,但如果我重新启动机器,它似乎会丢失设置?有什么想法为什么会发生这种情况? - beakersoft

9

3
需要重新启动docker-machine吗? - Federico Nafria

7

环境:

  • Docker守护进程: 1.12.3
  • Docker客户端: 1.12.2
  • Docker API: 1.24
  • Docker Machine: 0.8.2

在创建机器之前

您可以使用参数设置一个或多个不安全的注册表和注册表镜像。例如:

一个注册表

docker-machine create -d virtualbox --engine-insecure-registry hostname:5000  --engine-registry-mirror http://hostname:5000 n1

多个注册表
docker-machine create -d virtualbox --engine-insecure-registry hostname:5000 --engine-insecure-registry hostname:5001  --engine-registry-mirror http://hostname:5000 n1

创建完虚拟机后,您可以编辑 /var/lib/boot2docker/profile 文件添加镜像仓库和镜像源。
docker-machine ssh [machine-name]
vi /var/lib/boot2docker/profile

将注册表和镜像添加到EXTRA_ARGS中。
EXTRA_ARGS='
--label provider=virtualbox
--insecure-registry hostname:5000
--insecure-registry hostname:5001
--registry-mirror   http://hostname:5000
--registry-mirror   http://hostname:5001

现在您需要重新启动机器并检查它。

docker-machine restart [machine-name] 
docker info 

在创建机器之后,此方法不起作用

编辑 $USER/.docker/machine/machines/default/config.json

"EngineOptions": {
    "InsecureRegistry": [
        "XXX.XXX.virtual"
    ],
}

5

编辑 $USER/.docker/machine/machines/default/config.json

    "EngineOptions": {
        "InsecureRegistry": [
            "XXX.XXX.virtual"
        ],
    }

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