Docker - 无法将图像推送到私有注册表

时间:2014-11-14 09:29:18

标签: registry docker private

我通过拉动和运行注册表图像在我的服务器上创建了自己的私有注册表。

sudo docker run -d -p 5000:5000 registry

之后,我尝试标记一个简单的图像并将其推送到服务器。

sudo docker tag ubuntu:latest localhost:5000/myprivateubuntu

我收到了这个错误:

Error: Invalid registry endpoint ... Get ... If this private registry supports only HTTP or HTTPS with an unknown CA certificate, please add '--insecure-registry localhost: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/localhost:5000/ca.crt

无论如何都知道问题是什么?

4 个答案:

答案 0 :(得分:20)

停止服务。

sudo service docker stop

使用--insecure-registry参数重启服务:

/usr/bin/docker -d --insecure-registry localhost:5000

或编辑/etc/default/docker文件并添加以下行:

DOCKER_OPTS="--insecure-registry localhost:5000"

答案 1 :(得分:0)

在docker中设置本地不安全注册表以及代理:

1)在ubuntu中添加以下标志--insecure-registry IP:文件/ etc / default / docker中DOCKER_OPTS下的端口

1.1)配置no_proxy env变量以绕过本地IP /主机名/域名...因为代理可以抛出一个交互式消息...就像继续这个中间msg混淆docker客户端并最终超时......

1.2)如果配置了域名...那么如果不使用DNS,请不要忘记更新/ etc / hosts文件。

1.3)在/ etc / default / docker中设置env变量http_proxy和https_proxy ...因为它可以从公司外部中心下载图像。格式为http_proxy = http://username:password@proxy:port

2)重新启动docker服务...如果作为服务安装,请使用sudo service docker restart

3)重启注册表容器[sudo docker run -p 5000:5000 registry:2]

4)使用sudo docker tag imageid标记所需的图像IP:port / imagename / tagname ifany

5)推送图像... sudo docker push ip:port / imagename

6)如果你想从另一台机器拉出图像,说B没有TLS / SSL,那么在B中应用setps 1,1.1和 2. 如果未在机器B中完成这些更改,则拉动将失败。

答案 2 :(得分:0)

根据接受的答案的评论,看起来解决方案并不适用于所有人。以下解决方案适合我。

为Docker

创建CmisObject object = session.getObject(idObject); conf覆盖文件
systemd

添加以下行并保存

sudo mkdir /etc/systemd/system/docker.service.d
sudo touch /etc/systemd/system/docker.service.d/docker.conf
sudo vi /etc/systemd/system/docker.service.d/docker.conf

修改[Service] ExecStart= ExecStart=/usr/bin/docker daemon -H fd:// $DOCKER_OPTS EnvironmentFile=-/etc/default/docker

/etc/default/docker

添加以下行并保存。将sudo vi /etc/default/docker 替换为您的注册域名和端口

localhost:5000

重新启动DOCKER_OPTS="--insecure-registry localhost:5000" 守护程序

重新加载覆盖配置并重新启动docker,如下所示

docker

答案 3 :(得分:0)

我的解决方案基于先前的解决方案。

# docker -v
Docker version 18.09.1, build 4c52b90
# uname -a
Linux host 4.15.0-43-generic #46~16.04.1-Ubuntu SMP Fri Dec 7 13:31:08 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

我的/etc/docker/daemon.json文件的内容:

{
    "runtimes": {
        "nvidia": {
            "path": "/usr/bin/nvidia-container-runtime",
            "runtimeArgs": []
        }
    },
    "insecure-registries" : [
        "ipaddress:port"
      ],
    "experimental" : false,
    "debug" : true
}

其中ipaddress:port是注册表计算机的点分IPv4地址,后跟注册表端口(例如127.0.0.1:12345)。我不必加http://或类似的前缀。

/etc/default/docker不变

然后我用以下命令重新加载并重新启动守护进程:

# sudo systemctl daemon-reload
# sudo systemctl restart docker

docker push可以在不安全的注册表中正常工作。