当前位置: 首页 > 面试题库 >

如何替换Dockerfile中的--from标签以能够在Jenkins管道中构建映像

伍胡媚
2023-03-14
问题内容

我有以下内容Dockerfile

FROM docker.m.our-intra.net/microsoft/dotnet:2.1-sdk
WORKDIR /app
COPY . ./aspnetapp/
WORKDIR /app/aspnetapp
RUN dotnet publish -c Release -o out

FROM docker.m.our-intra.net/microsoft/dotnet:2.1.4-aspnetcore-runtime
WORKDIR /app
COPY --from=docker.m.our-intra.net/microsoft/dotnet:2.1-sdk /app/aspnetapp/MyProject.WebApi/out ./
ENTRYPOINT ["dotnet", "MyProject.WebApi.dll"]

该映像已在本地成功构建。

我正在尝试配置Jenkins管道,并尝试Jenkinsfile使用以下步骤构建映像:

stage('Build') {
            steps {
                script {
                    echo 'Build...'
                    sh 'docker build -t mytag:v${BUILD_NUMBER} -f Dockerfile .'
                    echo 'Build Completed'
                }               
            }
        }

但是在Jenkins控制台中,我得到了错误:

未知标志:来自

我应该如何编辑我的Dockerfile,尤其是--from标签,以便能够在本地和通过Jenkins管道构建图像?

更新: 我已经将Docker更新为18.06.1-ce版本。仍然有同样的错误。

詹金斯版 2.89.4

Docker Pipeline插件安装版本1.9.1

更新2: 我添加了docker version向我展示Docker版本的命令:

stage('Build') {
            steps {
                script {
                    echo 'Build...'
                    sh 'docker version'
                    sh 'docker build -t fact:v${BUILD_NUMBER} -f Dockerfile .'
                    echo 'Build Completed'
                }               
            }
        }

它输出以下内容:

Client:
 Version:           18.06.1-ce
 API version:       1.24 (downgraded from 1.38)
 Go version:        go1.10.3
 Git commit:        e68fc7a
 Built:             Tue Aug 21 17:25:03 2018
 OS/Arch:           linux/amd64
 Experimental:      false

Server:
 Engine:
  Version:          1.12.6
  API version:      1.24 (minimum version )
  Go version:       go1.8.3
  Git commit:       3e8e77d/1.12.6
  Built:            Wed Dec 13 12:18:58 2017
  OS/Arch:          linux/amd64
  Experimental:     false

问题答案:

我认为这是docker引擎版本问题。您的Jenkins机器上的Docker引擎版本必须为17.05或更高版本,以支持--from或多阶段构建。

从文档-

多阶段构建是一项新功能,需要守护程序和客户端上使用Docker 17.05或更高版本。

参考-https: //docs.docker.com/develop/develop-images/multistage-build/#use-
multi-stage-builds



 类似资料:
  • 我有一个Jenkinsfile多分支管道脚本,它在两个不同的Jenkins系统上运行。Jenkins文件依赖于特定的标签名。在其中一个系统中,基于标签的代理可用,而在另一个系统中,基于标签的代理不可用(有意)。前者运行良好。在没有匹配标签的Jenkins系统中,作业只是挂起,因为它找不到匹配的代理。 如果找不到标签,有没有办法指定中止(或不启动)生成的选项?

  • 问题内容: 尝试使用 这将失败,并显示身份验证错误。除了使用以外还有其他方法吗 withCredentials 在Jenkinsfile中签出标签 问题答案: 花完之后,几个小时就到了 在声明式管道中使用GitSCM的正确方法是 不像我在网络上的大多数地方都找到的

  • 问题内容: 通过使用詹金斯,我创建了一个“管道”类型的项目。然后将“ SCM管道”设置为。您可以检查我的GitHub存储库: 我想使用Jenkins管道构建docker映像。这是Jenkinsfile: Dockerfile也非常简单: 当我运行项目时。我收到以下错误: 这是完整的控制台输出 我检查了工作区: 测试 目录中什么都没有,但是Jenkinsfile和Dockerfile都在 test

  • 通过使用jenkins,我创建了一个“管道”类型的项目。我设置了“来自SCM的管道”来获取< code>Jenkinsfile。你可以查看我的GitHub库: 我想使用 Jenkins 管道来构建一个 docker 映像。以下是 Jenkinsfile: Dockerfile文件也非常简单: 当我运行这个项目时。我得到以下错误: 这是完整的控制台输出 我检查了工作区: 测试目录中没有任何内容,但J

  • 我是Docker和Jenkins的新手,我正在尝试创建一个Jenkins管道来构建Docker的形象。我在尝试构建时遇到了问题,并不断收到此错误: /var/jenkins_home/workspace/Docker-Pipeline@tmp/耐用-a11b32f8/脚本。sh:第1行:docker:未找到命令 我已经在虚拟机上安装了ubuntu 我正在做和他完全一样的事情,但总是失败。

  • 我正在尝试从管道中自动创建Jenkins管道构建。 我有一个管道,它创建一个比特桶存储库并向其提交一些代码,包括一个Jenkinsfile。 我需要向此管道添加另一个步骤,然后为其创建管道生成,这将运行 Jenkinsfile 中的步骤。 我认为Jobs DSL应该能够处理这一点,但我找到的文档非常稀少,我仍然不完全确定是否有可能或如何做到这一点。 任何帮助都将不胜感激。我想生成的Pipeline