[英]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中完成...拉動將失敗。
根據接受的答案的評論,看起來解決方案並不適用於所有人。 以下解決方案適合我。
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.