docker - Jenkins:无法在 Docker 容器中运行命令
问题描述
我正在尝试构建一个简单的 Docker 映像,然后使用 Jenkins Pipeline 在其中运行命令。我很困惑,因为我似乎是在我的构建服务器上执行命令,而不是在我的 docker 容器内。当我通过运行以下命令在我构建的容器中运行“pwd”时:
node ('docker2') {
docker.withRegistry('https://my-registry.com', 'my-creds') {
stage ('Checkout SCM') {
checkout scm
}
// Build Docker image from Dockerfile
stage ('Build Docker Image') {
def myImage = docker.build("my-image:${env.BUILD_ID}")
myImage.inside {
sh 'pwd'
}
}
}
}
它返回“/home/build/workspace/Docker-Build-And-Push”,这似乎是我从中构建容器的工作目录,而不是容器本身内部的目录。
此外,当我尝试在我的容器中运行“mkdir test”时,它在我的构建服务器中创建了一个测试目录,而不是容器。但是当我运行“主机名”时,它不会返回我的构建服务器的主机名,而是一个随机的数字字符串,所以这似乎来自我的容器......
我的 Dockerfile 非常简单,只包含“FROM alpine:latest”。
在我看来,我的命令应该在我的容器内而不是在我的构建服务器上运行。我究竟做错了什么?
解决方案
-v
Jenkins 使用参数将工作区安装在您的 docker 容器中。因此,您会看到构建服务器的目录结构,并且如果您创建一个文件,它实际上是在工作区中创建的。
您应该能够在您构建的日志中看到确切的 docker 命令。
推荐阅读
- python - 将代码覆盖率提高到 100% - 尝试除了通过 -> 使用抑制
- kotlin - 如何在 kotlin 数据类中将不可为空的属性初始化为 this 指针?
- javascript - 如何使用 javascript 或 jquery 获取 td 值的字体颜色或文本颜色
- mysql - 如果值相同,则与上一行进行比较并留空
- postgresql - Postgresql 表列,如何将 Unixtimestamp 转换为可读时间戳?
- python - python if语句文本
- typo3 - Extbase Persistence TypoScript 是否应该始终全局加载?
- java - 使用 JShell 进行调试
- angularjs - 如何使用 Sharepoint Rest API 过滤多行文本字段?
- qt - 如何使用 QMAKE 在 build 文件夹中复制或创建包含特定文件的文件夹