- 官方文档:https://containrrr.dev/watchtower/
- 博客:https://blog.icolak.com/archives/watchtower---zi-dong-geng-xin-docker-jing-xiang-yu-rong-qi
之前感觉自己并不是很需要docker容器的自动更新功能,因为自己的容器还没有多到管理不过来的情况,而且更新并不一定是什么好事情。但是现在想法改变了,更新失败如果手动回滚的话,会非常的不方便,而有软件能够帮你做这些事情当然就舒服多了。看了许多博客,发现watch tower 的使用都喜欢用 docker run 的方式启动,而不是用更加简便的composer方式。故这篇文章想要用composer的方式来使用watch tower。
watch tower 更新失败
私有库官方文档:https://containrrr.dev/watchtower/private-registries
在docker 的 deamon.json 的中配置了镜像库,我以为watch tower 能够从docker中读取到这个配置,但是实际上是不行的,它只会连接 config.json 中配置的镜像库,而默认是连接docker官方的,在国内就连接不不上,然后更新失败。我换成了1panel提供的镜像库https://docker.1panelproxy.com,在此也要感谢1panel。
watch tower 配置
https://containrrr.dev/watchtower/linked-containers
services:
watchtower:
image: containrrr/watchtower
container_name: watchtower
volumes:
- /var/run/docker.sock:/var/run/docker.sock
# 配置私有镜像库的认证文件
- ./config.json:/config.json
environment:
- TZ=Asia/Shanghai
- WATCHTOWER_CLEANUP=true
- WATCHTOWER_RUN_ONCE=true
command: [ "container1", "container2" ]
config.json的配置内容,需要之前使用过registry才会生成,而且应该是由于docker的更新了有些格式上的变化,之前内容不支持了,结果就是还是采用默认的docker.1panel.dev
,这里贴出最新的配置(Docker version 27.3.1)。默认的存储位置~/.docker/config.json
{
"auths": {
"https://docker.1panelproxy.com": {}
},
"credsStore": "desktop.exe"
}
Error response from daemon: Get \"https://docker.1panel.dev/v2/\": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers). Proceeding to next.