我已经安装了Watch望塔,并按照文档进行操作,以使用身份验证帮助程序设置私有注册表身份验证。在调试模式下,我看到它记录一条消息,提示已获取身份验证值,但随后它无法通过“没有基本身份验证凭据”提取图像。检查auth值,它只是我的配置中的主机名,没有凭据。我验证了在主机系统(Raspbian)上,我可以使用相同的docker config提取新版本,而无需执行任何自定义身份验证,使用相同的二进制文件即可进行所有操作。
这是我的docker配置:
{
"auths" : {
"0000000000.dkr.ecr.us-east-1.amazonaws.com" : {}
},
"credHelpers": {
"0000000000.dkr.ecr.us-east-1.amazonaws.com": "ecr-login"
}
}
这是我的码头工人组成:
version: "3"
services:
cavo:
image: 0000000000.dkr.ecr.us-east-1.amazonaws.com/test:1
ports:
- "8080:80"
restart: always
watchtower:
image: containrrr/watchtower
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /root/.docker/config.json:/config.json
- /usr/bin/docker-credential-ecr-login:/bin/docker-credential-ecr-login
environment:
- AWS_REGION=us-east-1
- AWS_ACCESS_KEY_ID=AAAAAAAAAAAAA
- AWS_SECRET_ACCESS_KEY=aaaaaaaaaaaaaaa
command: --debug --interval 30
restart: always
并且当守望台尝试检查新图像时,这是日志文件:
watchtower_1 | time="2019-12-25T22:49:34Z" level=debug msg="Pulling 0000000000.dkr.ecr.us-east-1.amazonaws.com/test:1 for /root_test_1"
watchtower_1 | time="2019-12-25T22:49:34Z" level=debug msg="Loaded auth credentials { 0000000000.dkr.ecr.us-east-1.amazonaws.com } from /config.json"
watchtower_1 | time="2019-12-25T22:49:34Z" level=debug msg="Got auth value: eyJzZXJ2ZXJhZGRyZXNzIjoiMDAwMDAwMDAwMC5ka3IuZWNyLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIn0="
watchtower_1 | time="2019-12-25T22:49:34Z" level=debug msg="Got image name: 0000000000.dkr.ecr.us-east-1.amazonaws.com/test:1"
watchtower_1 | time="2019-12-25T22:49:35Z" level=debug msg="Error pulling image 0000000000.dkr.ecr.us-east-1.amazonaws.com/sump-pump-v2:1, Error response from daemon: Get https://0000000000.dkr.ecr.us-east-1.amazonaws.com/v2/test/manifests/1: no basic auth credentials"
watchtower_1 | time="2019-12-25T22:49:35Z" level=info msg="Unable to update container /root_test_1. Proceeding to next."
watchtower_1 | time="2019-12-25T22:49:35Z" level=debug msg="Error response from daemon: Get https://0000000000.dkr.ecr.us-east-1.amazonaws.com/v2/test/manifests/1: no basic auth credentials"
解压缩auth值,它只有主机名。没有存储库凭据。
我试图遵循“ Credential helpers”文档,但是不确定我是否理解上述Dockerfile所在的位置。
任何朝着正确方向的指针将不胜感激。谢谢!
答案 0 :(得分:2)
尝试以下操作:
创建一个名为helper的Docker卷
docker volume create helper
从文档中的Dockerfile构建映像
docker build -t aws-ecr-dock-cred-helper .
docker run -d --rm --name aws-cred-helper --volume helper:/go/bin aws-ecr-dock-cred-helper
容器将启动并将helper
卷安装到/go/bin
所在的docker-credential-ecr-login,然后停止。
您可以使用
helper
卷的内容
docker run --rm --it -v helper:/go/bin alpine
然后做
ls /go/bin
您应该看到docker-credential-ecr-login
二进制文件。
我没有使用docker compose,但是您必须将helper
卷安装到/go/bin
的守望台容器中,并出于某种原因用/go/bin
导出$ PATH
就像在文档中一样:
environment:
- HOME=/
- PATH=$PATH:/go/bin