冲突。容器名称“/gitlab-runner”已被容器使用。

5
我是一名有用的助手,可以为您翻译文本。

我正在按照指南安装Docker,以在Ubuntu 16.4上运行我的GitLab服务器。

当我执行以下命令时:

docker run -d --name gitlab-runner --restart always \
  -v /srv/gitlab-runner/config:/etc/gitlab-runner \
  -v /var/run/docker.sock:/var/run/docker.sock \
  gitlab/gitlab-runner:latest

到目前为止一切都很好。然而,当我运行下一个命令来从这个指南注册运行程序时:
docker run --rm -t -i -v /srv/gitlab-runner/config:/etc/gitlab-runner --name gitlab-runner gitlab/gitlab-runner register

我一直收到以下信息:

docker:守护程序的错误响应:冲突。容器名称“/gitlab-runner”已被容器“b055ded012f9d0ed085fe84756604464afbb11871b432a21300064333e34cb1d”使用。您必须删除(或重命名)该容器才能重用该名称。

但是,当我运行docker container list以查看容器列表时,列表为空。

有人知道我怎样解决这个错误吗?


1
我刚刚提交了一个问题,以改进这个领域的文档,感谢详细的描述!:https://gitlab.com/gitlab-org/gitlab-runner/issues/3585 - David Planella
4个回答

12

作为一个有经验的IT技术人员,我想补充一下我的看法,最近我也研究了GitLab文档以使Docker GitLab runner工作。

按照Docker镜像安装和配置指南,它告诉你启动该容器,但我认为这是错误的,你需要在注册Runner之后再启动容器。

如果您运行了以下命令:

docker run -d --name gitlab-runner --restart always \
  -v /srv/gitlab-runner/config:/etc/gitlab-runner \
  -v /var/run/docker.sock:/var/run/docker.sock \
  gitlab/gitlab-runner:latest

只需使用docker rm -f gitlab-runner命令删除Docker容器,然后继续注册runner

docker run --rm -t -i -v /srv/gitlab-runner/config:/etc/gitlab-runner --name gitlab-runner gitlab/gitlab-runner register

这将注册runner,并将配置文件放置在本地机器上的/srv/gitlab-runner/config/config.toml中。您可以随后运行原始的docker run命令:
docker run -d --name gitlab-runner --restart always \
  -v /srv/gitlab-runner/config:/etc/gitlab-runner \
  -v /var/run/docker.sock:/var/run/docker.sock \
  gitlab/gitlab-runner:latest

如果由于名称再次使用而无法工作,请再次运行docker rm -f gitlab-runner命令-您不会丢失gitlab-runner配置。

这将使用从注册命令设置的配置启动Docker GitLab Runner。

希望这可以帮助您!


2
你试图运行两个同名的容器?这些指令来自哪里?你在回复中说你遇到了错误“没有这样的容器:gitlab-runner-config”,但这不是你尝试运行的任何一个容器的名称?
看起来你的第一个容器应该根据我在其中看到的所有内容(包括你的“volumes-from”)被称为“gitlab-runner-config”。可能这就是为什么“gitlab-runner”没有出现在“docker ps”中的原因,因为你试图从一个不存在的容器中获取卷。尝试清除一切,然后运行以下命令:
$ docker run -d --name gitlab-runner-config --restart always \
  -v /srv/gitlab-runner/config:/etc/gitlab-runner \
  -v /var/run/docker.sock:/var/run/docker.sock \
  gitlab/gitlab-runner:latest

...

$ docker run -d --name gitlab-runner --restart always \
    -v /var/run/docker.sock:/var/run/docker.sock \
    --volumes-from gitlab-runner-config \
    gitlab/gitlab-runner:latest

编辑:好的,我已经阅读了指南,您正在错误地按照说明进行操作。在第2步中,要么执行一个命令,要么执行两个后续命令。要么执行组合配置并运行容器(称为gitlab-runner),要么执行配置容器(称为gitlab-runner-config),然后执行运行容器(称为gitlab-runner)。您正在使用相同的容器名称执行多个步骤,但是混淆了它们。


是的,你说得对,我只需要做其中一个。我尝试删除容器,只执行第一个命令,但当我运行第三步中注册runner的命令时,仍然会收到相同的错误消息。 - Chin Leung
那似乎是另一个问题。请随意接受此答案,并创建另一个问题,详细说明您遇到的步骤和错误。 - johnharris85
这是完全相同的错误信息。我更新了问题。 - Chin Leung
你一直在用同一个名称来调用容器。文档在这方面看起来相当糟糕,但是可以像 --name gitlab-runner-register 这样另外命名。我甚至不确定文档想让你做什么,因为我认为 register 命令不会注册现有的 runner?总的来说,文档看起来相当混乱。 - johnharris85
好的,我今晚会试一下并回复你。谢谢! - Chin Leung

1
我也遇到了这个问题,在GitLab文档中提出了问题。这是我的评论:
实际上,我认为问题可能是不同的:
在第3步中,单击链接会带您转到 https://docs.gitlab.com/runner/register/index.html#docker
这样做,您会着陆在正确的部分,接近页面的结尾。但这也意味着您错过了页面顶部的一个重要信息:
在注册 Runner 之前,您需要首先:
- 在与 GitLab 安装在不同服务器上安装它 - 通过 GitLab 的界面获取共享或特定 Runner 的令牌
也就是说,文档说明建议并假定 gitlab runner 容器位于另一台机器上。因此,它们不适用于同一台机器上的容器。
我的建议是,在注册步骤后添加一个注释,首先检查页面顶部的注册要求。
除此之外,@johnharris85的答案可以用于在同一台机器上注册runner。你需要做的唯一额外事项是将--network="host"选项添加到命令中以进行注册。即:
sudo docker run --rm -t -i \
  -v /srv/gitlab-runner/config:/etc/gitlab-runner \
  --network="host" --name gitlab-runner-register \
  gitlab/gitlab-runner register

1
运行 docker ps -a 命令,您将看到所有容器(即使是未运行的),如果在运行时使用--rm选项,则停止后容器将被删除,如果这是您想要的行为。
如果您要创建多个相同的镜像并且不关心名称,可以始终跳过整个--name选项。

我试图删除在 ps -a 中显示的容器,但是我收到了错误消息 No such container: gitlab-runner-config.。因此,我重新执行了第一个命令,然后停止了容器而不是删除它,但我仍然收到相同的错误消息,即容器已经在使用中。 - Chin Leung

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接