当前位置: 首页 > 知识库问答 >
问题:

如何安装docker卷与jenkins docker容器?

壤驷彦
2023-03-14

我让jenkins在github上的容器和项目源代码中运行。

我需要在与jenkins相同的主机上运行容器中的项目,但不是作为docker中的docker,我希望将它们作为兄弟容器运行。

我的管道如下所示:

  1. 从github中提取源文件

我现在要做的是使用jenkins容器中主机的docker套接字:

/var/run/docker.sock:/var/run/docker.sock

jenkins容器将源代码为/var/jenkins_home/workspace/BRANCH_NAME的卷装载到项目容器时出现问题:

volumes:
 - ./servers/identity/app:/srv/app

我在项目容器中获得空文件夹“/srv/app”

我最好的猜测是docker试图从主机而不是从jenkins容器装载它。

所以问题是:如何显式设置从中装入卷的容器?

共有3个答案

呼延辰龙
2023-03-14

在主机和Jenkins之间共享sock是我的问题,因为“/var/Jenkins_home”很可能是Jenkins容器的卷。

我的解决方案是在一个systemd容器中安装docker,而不共享袜子。

docker run -d --name jenkins \
    --restart=unless-stopped \
    --privileged \
    -v /sys/fs/cgroup:/sys/fs/cgroup:ro \
    -v jenkins-vol:/var/lib/jenkins \
    --tmpfs /run \
    --tmpfs /run/lock \
    ubuntu:16.04 /sbin/init

然后在上面安装Jenkins,Docker和Docker Comment。

郭麒
2023-03-14

尝试:

docker run -d --volumes-from <ContainerID> <YourImage>

其中容器ID是要从其中获取数据的容器的ID。

您还可以通过以下方式创建卷:

docker volume create <volname>

并将其分配给两个容器

volumes:
 - <volname>:/srv/app
阳长恨
2023-03-14

我在使用Jenkins docker容器运行另一个容器时遇到了同样的问题。

这不是推荐的方式,解释在这里。如果你仍然需要使用这种方法,那么这个问题就不是问题了。

假设我们需要在Jenkins docker容器内运行另一个容器(ContainerA),docker管道插件将使用--volumes from将Jenkins容器卷装载到ContainerA。

如果试图使用--volume-v将Jenkins容器中的特定目录映射到ContainerA,则会出现意外行为。

这是因为--volumes-v会尝试将主机中的目录映射到ContainerA,而不是从Jenkins容器中的目录映射。如果在主机中找不到目录,那么您将在ContainerA中得到一个空目录。

简而言之,我们不能将一个特定的目录从容器A映射到容器B,我们只能将整个卷从容器A挂载到容器B,并且不支持卷别名。

  1. 如果Jenkins使用主机卷运行,则可以将主机目录映射到目标容器
  2. 否则,您可以访问新创建的容器中与Jenkins容器位置相同的文件
 类似资料:
  • 我有很多运行docker容器的测试。每个都有一个卷。 如何知道需要删除的卷名? 例如: 手动停止并删除容器后,卷仍然存在。 我不想删除所有卷,因为其中一些卷仍在使用中。

  • 如何在高山容器中安装Docker并运行docker映像?我可以安装,但无法启动docker,并且在运行时获取“docker命令未找到错误”。

  • 问题内容: 我在android项目中使用docker作为GitLab CI运行器。在测试运行结束时,将测试结果保存在build目录下的xml和html中: 我想访问这些文件,但是文档中没有提到如何像那样装载卷。 问题答案: 我建议不要从主机为您的CI装入卷。如果确实需要,则必须相应地配置运行器()。如果使用的是运行程序,则永远不会知道要在哪个系统上执行特定的构建。 我认为更好的解决方案是将测试结果

  • 问题内容: 使用来自注册表的docker映像时,我经常需要查看映像容器创建的卷。 注意:我在Red Hat 7上使用Docker版本1.3.2。 例 来自Docker Registry 的官方映像在处为容器配置了一个卷。 在容器中显示体积最简洁的命令是什么? 问题答案: 使用来获取容器ID。 然后 例: 1号航站楼 2号航站楼 输出 显然是由于使用 Go 语言来实现docker命令工具。 在没有命

  • 当使用来自注册中心的docker映像时,我经常需要看到映像的容器创建的卷。 在容器中显示卷的最简洁的命令是什么?

  • 我在Windows上安装了支持WSL2的Docker Desktop。一切按预期进行。当我使用卷挂载运行容器时,我可以访问该文件夹中的所有windows文件。 不幸的是,docker中的windows共享的性能并不是很好,所以我尝试从wsl机器挂载一条路径。 但是使用的输出只是,而使用的输出是我的主目录。 有人能给我解释一下当我从Windows运行时,这个目录(物理上/在wsl/我的计算机中)在哪