簡體   English   中英

Docker - 無法將圖像推送到私有注冊表

[英]Docker - Unable to push image to private registry

我通過拉動和運行注冊表圖像在我的服務器上創建了自己的私有注冊表。

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

無論如何知道這是什么問題?

停止服務。

sudo service docker stop

使用--insecure-registry參數重新啟動服務:

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

或編輯/etc/default/docker文件並添加以下行:

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

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

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

1.1)配置no_proxy env變量以繞過本地IP /主機名/域名...因為代理可以拋出交互式消息...就像繼續這個中間消息混淆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注冊表: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中完成...拉動將失敗。

根據接受的答案的評論,看起來解決方案並不適用於所有人。 以下解決方案適合我。

為Docker創建systemd conf覆蓋文件

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 ,如下所示

sudo systemctl daemon-reload
sudo systemctl restart docker 

我的解決方案建立在之前的解決方案之上。

# 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送到不安全的注冊表現在工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM