我有一个Dockerfile
,它将被实现为FROM
一个私有注册表的映像。我用Docker version 1.12.6, build 78d1802
和docker-compose version 1.8.0, build unknown
构建这个文件没有任何问题,但是在另一台有Docker version 17.06.1-ce, build 874a737
和docker-compose version 1.16.1, build 6d1ac21
的机器上,docker-compose build
返回:
FROM my.private.gitlab.registry:port/image:tag
http://my.private.gitlab.registry:port/v2/docker/image/manifests/tag: denied: access forbidden
docker pull my.private.gitlab.registry:port/image:tag
返回相同的结果。
请注意,我尝试获取my.private.registry:port/image:tag
,但http://my.private.registry:port/v2/docker/image/manifests/tag
已被捕获。
5条答案
按热度按时间yquaqz181#
如果这是一个经过身份验证的注册表,那么您需要在构建它的机器上运行
docker login <registryurl>
。每个主机只需要执行一次此操作。然后,该命令将auth缓存到文件中
e0bqpujr2#
登录并没有解决我的问题。这可能是特定于Mac的,但以防万一,这里是Git issue
我对它的评论:
也遇到了这个问题。
Dockerfile:
FROM <insert_private_registry>/test-image:latest
命令行
如果没有登录到私有注册表(预期),这两个命令都会失败
登录后,
docker pull ...
工作,docker-compose up
拉取镜像失败:当前解决方案
我们目前的解决方案是在运行docker-compose容器之前显式地拉取镜像:
kgqe7b3p3#
我注意到你的URL方案使用了http协议-- Docker需要配置为允许不安全的注册表。
创建或修改您的
daemon.json
(在以下位置之一需要):Linux:
/etc/docker/
Windows:
C:\ProgramData\Docker\config\
内容如下:
然后重新启动Docker(不仅仅是终端会话)并重试。
登录后,请使用:
根据tarun-lalwani的回答,这应该将auth添加到配置中,以备将来使用(
docker pull
等)。iqih9akk4#
在Linux上,我可以通过将sudo添加到docker-compose up命令来修复此错误。
klh5stk15#
在我的例子中,docker镜像名称包含端口
reg.mygitlab.com:443/internal/ci-docker-base:python3
,所以我需要做的是docker login reg.mygitlab.com:443
,你可以看到433
,这很重要,它西姆斯了稍后当docker试图拉取镜像时,它将使用包含端口的确切名称