我更改/etc/default/docker为添加一个私有Docker注册表,然后重新启动了docker服务,最后尝试提取一些映像。
/etc/default/docker
$ cat /etc/default/docker DOCKER_OPTS="--insecure-registry mydocker-registry.net:5000" $ service docker restart $ docker pull mydocker-registry.net:5000/testdb FATA[0000] Error: v1 ping attempt failed with error: Get https://mydocker- registry.net:5000/v1/_ping: dial tcp: lookup mydocker-registry.net: no such host. If this private registry supports only HTTP or HTTPS with an unknown CA certificate, please add `--insecure-registry mydocker- registry.net: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/mydocker- registry.net:5000/ca.crt
一个ps输出显示一无所知DOCKER_OPTS环境变种。
ps
$ ps auxwww|grep docker root 6919 0.0 0.1 331076 19984 ? Ssl 10:14 0:00 /usr/bin/docker -d -H fd://
根据Docker文档,使用私有注册表的方式是通过中的DOCKER_OPTS进行/etc/default/docker。为什么这样做之后在这种环境下不生效?
有多种方法可以为Docker守护程序配置守护程序标志和环境变量。该建议的方法是使用独立于平台的daemon.json文件,该文件位于/etc/docker/默认情况下,在Linux上。
daemon.json
/etc/docker/
因此,要配置不安全的注册表,请执行以下操作:
在/etc/docker/daemon.json文件中设置以下标志:
/etc/docker/daemon.json
{ "insecure-registries": ["mydocker-registry.net:5000"]
}
重新启动Docker
$ sudo systemctl restart docker
每次更轻松!
根据Docker 文档,为Docker守护程序配置守护程序标志和环境变量的推荐方法是使用 systemd 插入文件 。
因此,对于这种特定情况,请执行以下操作:
/etc/systemd/system/docker.service.d/private-registry.conf
如果不存在,请创建目录 /etc/systemd/system/docker.service.d
/etc/systemd/system/docker.service.d
[Service] ExecStart= ExecStart=/usr/bin/dockerd --insecure-registry mydocker-registry.net:5000
刷新更改:
$ sudo systemctl daemon-reload
重新启动Docker:
瞧!
编辑档案 /lib/systemd/system/docker.service
/lib/systemd/system/docker.service
... [Service] ExecStart=/usr/bin/docker -d -H fd:// $DOCKER_OPTS ... EnvironmentFile=-/etc/default/docker ...
然后执行
systemctl daemon-reload systemctl restart docker
确认/etc/default/docker已加载
ps auxwww | grep docker root 4989 0.8 0.1 265540 16608 ? Ssl 10:37 0:00 /usr/bin/docker -d -H fd:// --insecure-registry
而已。