DevOps
docker
docker
  • 基础知识
    • 概述
      • 核心概念
      • Docker 引擎
      • 基本架构
      • 联合文件系统
      • 网络虚拟化
    • 安装
      • 安装Docker Engine
      • 以非 root 用户使用 Docker
      • 配置 Docker 服务
    • 3. Docker镜像
      • 3.1 获取镜像(pull)
      • 3.2 查看镜像信息
        • images
        • tag
        • inspect
        • history
      • 3.3 搜寻镜像(search)
      • 3.4 删除镜像(rmi)
      • 3.5 清理镜像(prune)
      • 3.6 创建镜像
        • 基于已有容器创建
        • 基于本地模板导入
        • 基于Dockerfile创建
      • 3.7 导出镜像(save)
      • 3.8 导入镜像(load)
      • 3.9 上传镜像(push)
    • 4. Docker容器
      • 4.1 新建容器(create)
      • 4.2 启动容器(start)
      • 4.3 新建并启动容器(run)
      • 4.4 查看容器输出(logs)
      • 4.5 暂停容器(pause)
      • 4.6 恢复容器(unpause)
      • 4.7 停止止容器(stop)
      • 4.8 清除容器(prune)
      • 4.9 重启容器(restart)
      • 4.10 进入容器
      • 4.11 删除容器(rm)
      • 4.12 导出容器(export)
      • 4.13 导入容器(import)
      • 4.14 查看容器详情(inspect)
      • 4.15 查看容器内进程(top)
      • 4.16 查看统计信息(stats)
      • 4.17 复制文件(cp)
      • 4.18 查看变更(diff)
      • 4.19 更新配置(update)
    • 5. Docker仓库
      • 5.1 Docker Hub
      • 5.2 本地私有仓库
        • 使用HTTPS协议
        • 添加用户认证
        • 使用push时遇到的一些坑
    • 6. Docker数据管理
      • 6.1 数据卷
      • 6.2 数据卷容器
      • 6.3 利用数据卷容器来迁移数据
    • 7. 端口映射与容器互联
      • 7.1 端口映射
      • 7.2 容器互联
    • 8. Dockerfile
      • 8.1 基本结构
      • 8.2 指令说明
        • ARG
        • FROM
        • LABEL
        • EXPOSE
        • ENV
        • ENTRYPOINT
        • VOLUME
        • USER
        • WORKDIR
        • ONBUILD
        • STOPSIGNAL
        • HEALTHCHECK
        • SHELL
        • RUN
        • CMD
        • ADD
        • COPY
      • 8.3 创建镜像
      • 8.4 最佳实践
    • 9. Compose
      • 9.1 安装
      • 9.2 Compose文件
        • 9.2.1 services
        • 9.2.2 networks
        • 9.2.3 多文件Compose
          • Extend
          • Merge
          • Include
        • 9.2.4 锚点和别名
      • 9.3 Compose命令
      • 9.4 实例
  • 中间件安装
    • 安装tomcat
    • 安装redis
      • 单机
      • Cluster集群
    • 安装mysql
    • 安装ssh服务
      • 基于commit命令创建
      • 使用Dockerfile创建
    • 安装Apache
    • 安装ngnix
  • 操作系统镜像
    • BusyBox
    • ☑️Alpine
    • Debian/Ubuntu
    • CentOS/Fedora
  • Tips
    • docker 引擎开启远程访问
    • dockerfile-maven-plugin
    • IDEA 连接远程 docker
Powered by GitBook
On this page
  • hosts相关
  • docker的insecure-registries配置相关

Was this helpful?

Edit on GitHub
  1. 基础知识
  2. 5. Docker仓库
  3. 5.2 本地私有仓库

使用push时遇到的一些坑

hosts相关

因为学习时会经常进行虚拟机的销毁和重建,或者会经常更新一些新的技术栈,从而导致私有仓库所在的虚拟机经常变更,为了降低经常变更IP地址带来的不利影响,因此考虑用一个统一的内部域名进行映射,之后如果变更了本地仓库的部署位置,只需修改hosts文件即可。

而本人使用的学习环境是将docker服务安装在Linux虚拟机上,并开放Docker的TCP远程访问链接。然后通过在本地的Windows机器上设置DOCKER_HOST环境变量来使用远程的docker机器。

问题1:远程与本地经常发生混淆

在使用docker login hostname:port命令时,混淆了该命令实际的执行地点——在远程的Linux机器上,因而遇到了不断在本地的hosts文件上增加配置,但是命令却提示连接超时,如下所示:

$ docker login example.com:5000
Username: testuser
Password: 
Error response from daemon: Get "https://example.com:5000/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

问题出现的原因在于并未在实际部署本地registry服务的Linux机器上配置域名映射!

问题2:并未push到本地仓库

因为在部署registry服务时,使用了443这个https的默认端口号,所以在docker tag新建镜像标签时省略了443这个端口号,在加上使用了简单的域名,因此导致docker将镜像push到了其他地址,如下所示:

$ docker push local-registry/hello:2
The push refers to repository [docker.io/local-registry/hello]
aeccf26589a7: Preparing
f640be0d5aad: Preparing
aa4330046b37: Preparing
ad10b481abe7: Preparing
69715584ec78: Preparing
denied: requested access to the resource is denied

注意第二行的内容,根据该行的信息,可知push的目的地并不是本地仓库,而是docker的公共仓库,docker出现了误判。

上述问题的解决方案有两种:

  • 直接使用IP地址

    $ docker push 192.168.10.124/hello:1.0
    The push refers to repository [192.168.10.124/hello]
  • 添加端口号

    $ docker push local-registry:443/hello:1.0
    The push refers to repository [local-registry:443/hello]

docker的insecure-registries配置相关

注意,该配置属性是会区分端口号的。也就是说,不是只配置了一个IP地址或域名地址就万事大吉了,如果在访问registry的时候添加了端口号,docker会报错,错误信息如下所示:

$ docker login local-registry:443
Username: testuser
Password: 
Error response from daemon: Get "https://local-registry:443/v2/": tls: failed to verify certificate: x509: certificate is not valid for any names, but wanted to match local-registry:443
$ docker push local-registry:443/web-redis:1.0
aeccf26589a7: Preparing
f640be0d5aad: Preparing
aa4330046b37: Preparing
ad10b481abe7: Preparing
69715584ec78: Preparing
denied: requested access to the resource is denied

上述错误信息很容易将人误导向“认为是本地registry服务的TLS证书配置出现了差错”。

Previous添加用户认证Next6. Docker数据管理

Last updated 1 year ago

Was this helpful?