使用 Sonatype Nexus docker 代理
Posted
技术标签:
【中文标题】使用 Sonatype Nexus docker 代理【英文标题】:Using Sonatype Nexus docker proxy 【发布时间】:2021-04-11 15:47:02 【问题描述】:我在 repository.company.com 下部署了一个 Sonatype Nexus(它位于 nginx 代理后面)。
我创建了一个 docker 注册表和 docker 代理,并将它们添加到一个 docker 组“company-docker-group”中。代理设置为镜像https://registry-1.docker.io,并且还选中了外部层缓存选项。
我为端口 8092 设置了一个 http 连接器,但此时我无权更改 nginx 配置,因此我可以直接访问该端口。我注意到docker组中有一个URL定义为https://repository.company.com/repository/company-docker-group/
我可以通过这个 url 访问组吗?我可以docker login
进入这个网址,但是当我尝试
docker pull repository.company.com/repository/company-docker-group/maven:3.6.2-jdk-8
然后我得到这个错误:
Error response from daemon: manifest for repository.company.com/repository/company-docker-group/maven:3.6.2-jdk-8 not found: manifest unknown: manifest unknown
我只能通过repository.company.com:8092/maven:3.6.2-jdk-8
访问图像还是有办法使用 docker 组 URL?
【问题讨论】:
Docker 注册表必须在 Web 上下文路径“/”上运行,因此尝试从“/repository/company-docker-group”中提取是行不通的。有关如何使存储库出现在上下文路径“/”上的信息,请参阅我们的文档:help.sonatype.com/display/NXRM3/… 【参考方案1】:Sonatype documentation - 关于这个主题 - 告诉我们:
Docker 依赖于使用 SSL 的安全连接 来连接到存储库。 您因此需要向您的客户端工具通过 HTTPS
公开存储库管理器
docker 客户端与存储库的交互需要使用特定的端口
。这些可以在存储库连接器部分的存储库配置中进行配置
为了在您的网络上运行,您需要确保所选端口在您的组织中可用并且未被其他应用程序使用,并且没有防火墙或其他网络配置会阻止连接
因此,对于您的情况,您必须通过命令docker login https://repository.company.com:8092
登录到您的自定义 docker 注册表
成功登录后,假设您想将名为mynginx
的自定义映像nginx
保存到公司私有Docker 注册表中的com/company/proxy
文件夹中。为了能够将图像推入/拉出自定义 Docker 存储库,您必须:
-
通过命令
docker tag mynginx:1.0.0 repository.company.com:8092/com/company/proxy/mynginx:1.0.0
将您的图像标记为repository.company.com:8092/com/company/proxy/mynginx:1.0.0
。
应用以下命令将您的自定义镜像推送到公司的私有 Docker 注册表:docker push repository.company.com:8092/com/company/proxy/mynginx:1.0.0
通过保存您的自定义图像,您可以随时使用:docker pull repository.company.com:8092/com/company/proxy/mynginx:1.0.0
【讨论】:
以上是关于使用 Sonatype Nexus docker 代理的主要内容,如果未能解决你的问题,请参考以下文章
Maven私有库和本地库的安装与配置 Sonatype Nexus + Maven
Sonatype Nexus OSS 无法加载 nexus-npm-repository-plugin