我试图使用docker堆栈部署来部署本地节点应用程序。我很难得到一个好的工作流程。
我对堆栈部署和与码头枢纽的关系感到困惑。我很高兴不得不在本地构建映像,但是推动它是一个问题,因为我的网络太慢了,映像是169 my。
我的问题是,如果我只是在本地构建映像,那么它是否应该由docker堆栈部署来部署?还是我总是要把新的图像发布到码头枢纽?注:目前它已发布到一个私有存储库中。
为什么要问这个问题?,我试着做一个本地docker build -t myname/myimage:latest,然后用引用图像myname/myimage:latest的docker-compose.yml重新部署它,但是另一个映像从24小时前就一直出现,即使我使用docker rmi在本地删除了它(一次又一次)。然后,服务无法从应该在新构建中解决的错误开始。
我只能认为堆栈部署所部署的容器是基于在docker集线器中发布的容器,而不是本地映像。当然,在docker images中不断出现的图像的大小与当前停靠中心中的旧图像相匹配,而不是新的图像。
也许我做错了什么或者误解了堆栈部署是如何工作的?
发布于 2017-04-19 08:29:42
你应该试着用这样的方式来建立你的本地形象:
码头建立-t我的形象。
如果您想使用本地映像,请将其称为撰写文件中的“myimage:最新”。
如果您想将它推送到集线器,那么首先标记它。
docker标记id_of_myimage my_dockerhub_username/myimage:最新
然后再推它。
docker推送my_dockerhub_username/myimage:最新
发布于 2018-07-20 06:32:18
在这个工作流中,我建议在另一个堆栈中本地运行docker注册表容器,然后标记图像并将图像推送到“主机”,这样在构建其他堆栈时就可以从那里提取图像。
docker build -t my.docker.registry:5000/myimage:latest -t my.docker.registry:5000/myimage:specificversion .然后是docker push my.docker.registry:5000/myimage,它将把它放在本地注册表上。
在此之后,您应该能够从堆栈中提取出一个新版本,并在更改容器的内容时将其标记为最新版本。
用另一个示例https://forums.docker.com/t/docker-swarm-mode-and-local-images/22894/3概述
发布于 2020-11-06 09:59:29
关于这一点,Docker中有几个bug
我最终得到了写剧本来为自己做我需要做的事情。此脚本用于本地单节点群(这是我正在开发的)。
#!/usr/bin/perl
use strict;
my $stack_name = shift;
open(TASKS, qq#docker stack ps --format "{{.ID}} {{.Image}}" --no-trunc $stack_name|#) || die $!;
my %tasks;
while (<TASKS>) {
my ($id, $image) = m/^([^\s]+?)\s(.*)$/;
$tasks{$id} = $image;
}
close(TASKS);
my %needs_update;
for my $task_id (keys %tasks) {
open(CONTAINER, qq#docker ps --filter "name=.*$task_id" --no-trunc --format '{{.Image}} {{.ID}}'|#) || die $!;
$_ = <CONTAINER>;
my ($image, $container_id) = m/^([^\s]+?)\s(.*)$/;
close(CONTAINER);
if ($image && $image ne $tasks{$task_id}) {
open(CONTAINERINSPECT, q#docker inspect --format '{{ index .Config.Labels "com.docker.swarm.service.name" }}' # . $container_id . "|") || die $!;
$_ = <CONTAINERINSPECT>;
chomp;
$needs_update{$_} = $tasks{$task_id};
close(CONTAINERINSPECT);
}
}
for(keys %needs_update){
open(UPDATE, "docker service update -d --no-resolve-image --force --image $needs_update{$_} $_ |") || die $!;
print <UPDATE>;
close(UPDATE);
}https://stackoverflow.com/questions/43488905
复制相似问题