首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >从容器内获取停靠容器ID及其主机路径

从容器内获取停靠容器ID及其主机路径
EN

Stack Overflow用户
提问于 2019-12-19 04:02:34
回答 2查看 1.5K关注 0票数 0

我正在运行一个Jenkins声明性管道,其中一个阶段运行在一个码头容器上,并输出一个文件。我希望将这个文件从容器复制到主机的git init路径,以便将新输出的文件提交到源git存储库。

为了将输出的文件从容器复制到主机的git init路径,我可以使用docker cp命令(为此需要容器ID )和目标路径(在本例中是主机的git init路径)。

有人能分享如何得到这两个值的想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-19 11:26:19

通常你不会做这两件事。Docker是一个隔离系统,其目的是向容器隐藏主机系统的大部分细节(反之亦然);此外,容器文件系统往往不会以易于提取的方式存储在主机上。

当您是码头与管道结合使用时,它知道如何将当前的工作树挂载到容器中,所以最简单的方法是

代码语言:javascript
代码运行次数:0
运行
复制
stage('Something') {
  agent {
    docker { image 'my-image' }
  }
  steps {
    sh 'the_command'
  }
}

或者,如果您使用的是脚本管道

代码语言:javascript
代码运行次数:0
运行
复制
docker.image('my-image').inside {
  sh 'the_command'
}

在这两种情况下,the_command都会运行,其当前工作目录是按构建的工作区目录;它不需要知道它在Docker中运行,也不需要知道主机的任何信息,它写入到这个目录中的任何更改在构建的其他地方都是可见的。

更广泛地说,如果希望容器内的进程生成在主机上可见的文件,则需要在运行容器时使用docker run -v选项将其放入容器中。(在前面的示例中,Jenkins日志将包含一个显示这些选项的详细docker run命令。)如果应用程序的主要目标是生成主机可见的文件,那么在Docker之外运行它可能会更容易。如果Jenkins也在Docker中运行,请注意,docker run -v的第一个路径选项总是物理主机上的路径,因此无法将一个容器的文件系统映射到另一个容器中。

票数 1
EN

Stack Overflow用户

发布于 2019-12-19 08:33:36

您可以通过此cmd获取容器内的停靠容器ID:

代码语言:javascript
代码运行次数:0
运行
复制
cat /proc/self/cgroup | grep -o  -e "docker-.*.scope" | head -n 1 | sed "s/docker-\(.*\).scope/\\1/"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59403140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档