哪个命令是只更新docker镜像的

AI 生成的摘要

该讨论主题探讨了如何单独更新Discourse的Docker基础镜像,以优化在网络不佳环境下的重建流程。singi2016cn指出当前没有专门的命令仅拉取镜像,导致rebuild时会卡在镜像下载步骤,建议官方增加类似./launcher pull-docker的功能。

Lilly提供了替代方案:首先通过git pull更新启动脚本,然后使用grep查找当前使用的镜像标签(如discourse/base:2.0.20260915-0028),并手动执行docker pull进行下载。这样在后续执行./launcher rebuild app时,系统会检测到镜像已是最新,从而跳过下载过程。针对singi2016cn关于自动化脚本可能因官方更新而失效的担忧,Lilly认为短期内兼容性风险不大,建议可通过Bash脚本结合Cron任务实现自动化。

singi2016cn承认这是最坏情况的假设,并表示会采取“先执行再调整”的策略。随后singi2016cn更新了查找镜像标签的方法,建议使用grep base_image /var/discourse/templates/*.yml来更准确地获取模板中定义的镜像版本(如2.0.20261027-1647),再执行相应的docker pull命令。总结来说,虽然没有原生的一键更新镜像命令,但通过查找最新镜像标签并预先手动拉取,可以有效解决重建时的下载瓶颈。

哪个命令是只更新docker镜像的。

/var/discourse# ./launcher -h
Usage: launcher COMMAND CONFIG [--skip-prereqs] [--docker-args STRING]
Commands:
    start:       Start/initialize a container
    stop:        Stop a running container
    restart:     Restart a container
    destroy:     Stop and remove a container
    enter:       Open a shell to run commands inside the container
    logs:        View the Docker logs for a container
    bootstrap:   Bootstrap a container for the config based on a template
    run:         Run the given command with the config in the context of the last bootstrapped image
    rebuild:     Rebuild a container (destroy old, bootstrap, start new)
    cleanup:     Remove all containers that have stopped for > 24 hours
    start-cmd:   Generate docker command used to start container

Options:
    --skip-prereqs             Don't check launcher prerequisites
    --docker-args              Extra arguments to pass when running docker
    --skip-mac-address         Don't assign a mac address
    --run-image                Override the image used for running the container

我的场景是:
现在构建时,如果需要更新docker镜像,而服务器的网络又很糟糕时,那就卡在更新镜像这一步很久很久了。希望能有一个专门更新docker镜像的命令,那我就可以提前单独更新好镜像,然后从容的构建代码了。例如:

./launcher pull-docker

我知道可以手动搓一个还能用的版本,但是我还是希望官方能出一个。

嗯,我所知道的唯一方法就是先更新启动器脚本:

cd /var/discourse
git pull

然后找到启动器正在使用的默认镜像标签:

grep -m1 '^image=' launcher

输出内容应该类似于:

image="discourse/base:2.0.20260915-0028"

接着运行:

docker pull discourse/base:2.0.20260915-0028

然后当你运行 ./launcher rebuild app 时,我认为它会跳过下载步骤。

运行重建命令时,应该会显示 Status: Image is up to date for discourse/base:2.0.20260915-0028…

感谢回复,我现在就是使用类似的方式更新,只是比较繁琐,想自己写个自动化脚本,但是又怕官方更新后不兼容。

你可以使用可执行的 bash 脚本来实现,甚至可以使用 cron 任务来自动运行它。我不明白为什么它很快就会变得不兼容。

我是说它可能未来会不兼容,而我可能需要每次都要检查这个脚本,这无疑增加了额外的工作量。我只是在假设最坏的情况😂。当然,解决问题而言,还是先干了再说,边干边调整。

最新查看镜像的方式

grep base_image /var/discourse/templates/*.yml

显示如下:

/var/discourse/templates/postgres.template.yml:base_image: discourse/base:2.0.20261027-1647
/var/discourse/templates/redis.template.yml:base_image: discourse/base:2.0.20261027-1647
/var/discourse/templates/web.template.yml:base_image: discourse/base:2.0.20261027-1647
/var/discourse/templates/web.webonly.template.yml:base_image: discourse/base:2.0.20261027-1647-web-only

然后手动更新进行

docker pull discourse/base:2.0.20261027-1647