docker中实现 push到私有仓库

 更新时间:2025年08月13日 11:27:33   作者:IT杂人  
配置Docker Registry并设置Nginx访问,需调整客户端配置支持HTTP(指定端口80),避免默认443端口错误,建议启用HTTPS提升安全性,处理带认证的仓库推送

参考官方文档:https://docs.docker.com/registry/spec/api/

1.安装docker-registry

2.配置nginx访问(不设置https加密)

upstream docker_registry_pool{
    server registry:5000; #nginx与registry都用docker,所以直接使用别名和docker内网端口
}

server
{
        listen       80;
        server_name  registry.xxx.com;

        location / {
        proxy_set_header        Host $http_host;
        proxy_set_header        X-Real-IP $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://docker_registry_pool;
        proxy_read_timeout      900;
    }
}

3.测试本地push

--注意,打tag时,直接用完整访问路径作为前缀

如:

docker tag  myservice:v1.1   localhost:5000/tang/myservice:v1.1   #把myservice:v1.1 打上带绝对路径的v1.1tag

push时:

docker push localhost:5000/tang/myservice:v1.1  

查看是否存在:curl后查看json字符串是是否包括myservice镜像

curl  http://registry.xxx.com/v2/_catalog

查看存在的tag:curl后查看json字符串是是否包括myservice镜像

curl  http://registry.xxx.com/v2/tang/myservice/tags/list

4.测试远程push(现启动时默认是https,所以会报错)

打上tag,目前是http请求

docker tag  myservice:v1.1   registry.xxx.comtang/myservice:v1.1   #把myservice:v1.1 打上带绝对路径的v1.1tag

push时:

docker push  registry.xxx.comtang/myservice:v1.1
 http: server gave HTTP response to HTTPS client #报错

5.修改配置(切记,一定是客户端,而且非服务端

支持http:两种方式,选择其中一种即可,不可重复,假如是80端口,也要写上,因为docker-client默认使用443端口。

切记,一定是客户端,而且非服务端,如在B机器推送或者在公司电脑推送到远程A服务器上

5.1 方式一:修改docker客户端的配置

vim /usr/lib/systemd/system/docker.service

配置项后增加配置: 

--insecure-registry=registry.xxx.com:80,后面是你的域名或者ip,如果有端口也要带上,坑爹一定要指定加上80端口

ExecStart=/usr/bin/dockerd-current \
          --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current \
          --default-runtime=docker-runc \
          --exec-opt native.cgroupdriver=systemd \
          --userland-proxy-path=/usr/libexec/docker/docker-proxy-current \
          --init-path=/usr/libexec/docker/docker-init-current \
          --seccomp-profile=/etc/docker/seccomp.json \
          $OPTIONS \
          $DOCKER_STORAGE_OPTIONS \
          $DOCKER_NETWORK_OPTIONS \
          $ADD_REGISTRY \
          $BLOCK_REGISTRY \
          $INSECURE_REGISTRY \
          $REGISTRIES \
          --insecure-registry=registry.xxx.com:80 \
          --insecure-registry=你的ip:5000 

5.2 方式二:添加docker客户端配置

修改 /etc/docker/daemon.json 文件(如果没有就创建新的),并写入如下内容:

{ 
	"insecure-registries":[
		"xxx.xxx.xxx.xxx:5000",
		"registry.xxx.com:80"
	] 
}

5.3 如果是window客户端

修改:C:\Users\左右手公用\AppData\Roaming\Docker\daemon.json

或者修改Docker Desktop配置

5.4 修改后重启docker服务

#linux下
systemctl daemon-reload 

systemctl restart docker

6.再次测试远程push

重新打上tag,目前nginx配置的是80端口的http请求,一定要坑爹的显示加上80端口80!80!80!80!

因为docker-client默认使用443端口

docker tag  myservice:v1.1   registry.xxx.comtang:80/myservice:v1.1   #把myservice:v1.1 打上带绝对路径的v1.1tag

push时:

docker tag  myservice:v1.1   registry.xxx.comtang:80/myservice:v1.1   #把myservice:v1.1 打上带绝对路径的v1.1tag

成功!!!!

7.既然https是默认的,那就配置https吧

想一想,为什么我们打tag时不需要写上http或者https的标记,因为docker-client就是默认使用443端口,傲娇吧!

为了避免上面这些坑,其实建议nginx配置https的,那么docker-client发送https请求,nginx能接收处理

push带用户名密码的仓库

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • docker-compose安装mongoDB全过程

    docker-compose安装mongoDB全过程

    这篇文章主要介绍了docker-compose安装mongoDB全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • docker启动MySQL容器失败原因分析以及排查记录

    docker启动MySQL容器失败原因分析以及排查记录

    在使用Docker启动MySQL容器时,遇到了配置文件路径错误的问题,通过查看容器日志发现,容器读取的配置文件路径与指定的不一致,解决方法是修改启动命令中的配置文件路径,将其指向正确的目录,最终,容器成功启动并进入Up状态
    2025-02-02
  • Docker安装Nginx容器配置及重新生成镜像图文教程

    Docker安装Nginx容器配置及重新生成镜像图文教程

    Docker是一个用于开发,交付和运行应用程序的开放平台,Docker使您能够将应用程序与基础架构分开,从而可以快速交付软件,下面这篇文章主要给大家介绍了关于Docker安装Nginx容器配置及重新生成镜像的相关资料,需要的朋友可以参考下
    2023-05-05
  • 解决docker容器启动后马上退出的问题

    解决docker容器启动后马上退出的问题

    这篇文章主要介绍了解决docker容器启动后马上退出的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • Docker快速入门以及环境配置详解

    Docker快速入门以及环境配置详解

    Docker应该算是很热门的技术了,之前一直没怎么真正地去了解、接触。通过翻译这篇简单的教程,我同时也对Dcoker有了入门的了解。Docker确实是跨平台开发的利器。有需要的朋友们下面跟着小编一起来看看吧。
    2016-10-10
  • docker+ddns实现动态域名的示例代码

    docker+ddns实现动态域名的示例代码

    本文主要介绍了Docker使用ddns-go实现动态域名,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-11-11
  • Docker容器迁移Oracle到MySQL的实现方法

    Docker容器迁移Oracle到MySQL的实现方法

    本文主要介绍了Docker容器迁移Oracle到MySQL的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • mysql8.4.0实现主从复制部署

    mysql8.4.0实现主从复制部署

    主从复制是 MySQL 中一种用于实现数据冗余、提高可用性和性能的重要机制,本文主要介绍了mysql8.4.0实现主从复制部署,具有一定的参考价值,感兴趣的可以了解一下
    2024-07-07
  • 嵌入式移植docker报错问题(汇总)

    嵌入式移植docker报错问题(汇总)

    这篇文章主要介绍了嵌入式移植docker报错问题(汇总),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • Docker方式启动tomcat访问首页出现404错误

    Docker方式启动tomcat访问首页出现404错误

    这篇文章主要介绍了Docker方式启动tomcat访问首页出现404错误。文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12

最新评论