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

我有以下 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控制台中我收到错误:

Unknown flag: from

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

UPDATE: 我已将Docker更新为18.06.1-ce版本 . 还是有同样的错误 .

詹金斯诉 . 2.89.4

Docker Pipeline插件安装版本1.9.1

UPDATE 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

回答(1)

2 years ago

我相信它是一个docker引擎版本问题 . 您的Jenkins机器上的Docker引擎版本需要为17.05或更高版本才能支持 --from 或多阶段构建 .

来自docs -

多阶段构建是守护程序和客户端上需要Docker 17.05或更高版本的新功能 .

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